Shell script shebang для неизвестного пути
Можно ли указать строку shebang, не зная пути программы, которую вы хотите выполнить?
может не указывать путь
#!node
или укажите несколько параметров
#!/usr/local/bin/node
#!/usr/bin/node
Дополнительные точки для кросс-платформенного решения (различные варианты linux, BSD, OSX и т.д.)
Ответы
Ответ 1
/usr/bin/env
специально рассматривается для кросс-платформенных решений.
env executes utility after modifying the environment as specified on
the command line. The option name=value specifies an environmental
variable, name, with a value of value. The option `-i' causes env
to completely ignore the environment it inherits.
If no utility is specified, env prints out the names and values of
the variables in the environment, with one name=value pair per line.
поэтому что-то в строках:
#!/usr/bin/env node
Будет кросс-платформенный и "правильный путь".
Ответ 2
Вопреки тому, что люди думают, что для env
нет стандартного местоположения, поэтому мы можем получить только некоторую информацию о его местоположении:
-
/usr/bin/env
- MacOS (10.12)
- оба
/bin/env
, /usr/bin/env
- Fedora (25)
Я уверен, что другие смогут расширить список.
Ответ 3
Не используйте shebang.
node <<eof
your node program here
eof
Ответ 4
Поместите пробел после shebang. Если программа находится в переменной среды PATH, она должна идти.
#! perl
Конечно, особый случай для Perl был бы
:
eval 'exec perl -S $0 ${1+"[email protected]"}'
if 0;
Это работает на unix и OSX, даже если нет /usr/bin/env, как отмечено @Jens