Если вы когда-либо используете bash, вы можете воспользоваться одной из функций (?!) Bash: bash выполняет сценарии без лишнего шума, используя bash .Другие оболочки могут оставить его для ОС, которая обычно использует вместо /bin/sh
.Например:
bash-5.0$ echo 'echo $1 $BASH_VERSION' > foo.sh
bash-5.0$ for sh in sh bash dash ksh zsh; do $sh -c "./foo.sh $sh"; done
sh 3.2.57(1)-release
bash 5.0.7(1)-release
dash 3.2.57(1)-release
ksh
zsh 3.2.57(1)-release
(/bin/sh
- это ссылка на старую версию bash здесь в macOS.)
Итак, вы можете получить файл, подобный этому:
///usr/local/bin/node <(tail -n +1 "$0"); exit $?
console.log("Hello world")
Если вы запускаете это в браузере или других средствах запуска JavaScript, первая строка должна игнорироваться как комментарий.
Если вы запускаете это как скрипт в bash, первая строка сообщаетчтобы запустить ///usr/local/bin/node
, используя подстановку процесса с tail
для передачи остальной части файла на узел, а затем завершается:
bash-5.0$ cat foo.js
///usr/local/bin/node <(tail -n +1 "$0"); exit $?
console.log("Hello world")
bash-5.0$ ./foo.js
Hello world
Этот прием также может работать с ksh.///
в начале пути не должно вызывать проблем - три или более /
в начале пути эквивалентны одному /
.
Но я настоятельно рекомендую вамвместо этого используйте скрипт-обертку, как это предлагается в комментариях.