Притон скрипт для неизвестного пути


Можно ли указать строку shebang, не зная пути программы, которую вы хотите выполнить?

Может быть, не указывайте путь

#!node

Или укажите несколько вариантов

#!/usr/local/bin/node
#!/usr/bin/node

Дополнительные очки для кросс-платформенного решения (различные варианты linux, BSD, OSX и т. д...)

4 13

4 ответа:

/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

Будет кроссплатформенным и "правильным путем".

Вопреки тому, что люди могут подумать, что нет стандартного местоположения для env, поэтому мы можем только захватить некоторую информацию о его местоположении:

  • /usr/bin/env - MacOS (10.12)
  • оба /bin/env, /usr/bin/env - Fedora (25)
Я уверен, что другие смогут расширить этот список.

Не используйте shebang.

node <<eof
your node program here
eof

Поставьте пробел после shebang. Если программа находится в переменной окружения PATH, она должна идти.

#! perl

Конечно, частным случаем для Perl будет

:
eval 'exec perl -S $0 ${1+"$@"}'
  if 0;

Это работает на unix и OSX, даже когда нет /usr/bin/env, как отмечает @Jens