Чи можу я мати умовний шебанг?


7

У мене є сценарій, який можна запустити з різними перекладачами:

#!/usr/bin/env default-interpreter
[my script]

Але я хотів би скористатися такою формою, alternative-interpreterякщо вона доступна:

#!/usr/bin/env alternative-interpreter
[my script]

Чи є спосіб створити шебанг, який шукає alternative-interpreterі повертається назад, default-interpreterякщо перший не доступний?


Цитуючи пропозицію когось
Джонні Вонг

Відповіді:


4

Не безпосередньо, ні. Найкраще написати сценарій оболонки Bourne shell і shebang, який:

#!/path/to/my/wrapper

і обгортка починається з:

#!/bin/sh
for shell in first second third; do
    if /usr/bin/env "${shell}" "$@"; do exit $?; done
done
# We didn't find any of them.
exit 1

Це дозволяє env (1) використовувати список пошуку $ {PATH} для пошуку програм у порядку, вказаному в for-loop.


Хороша ідея. Але що робити, якщо я не знаю /path/to/firstі path/to/secondчи є ще спосіб використовувати /usr/bin/envдля перенаправлення виконання сценарію?
marcio

Якщо команда існує, але не вдається, вона все одно запустить другу, а потім третю програму.
Aurélien Ooms
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.