Поскольку интерпретаторы, такие как zsh, удар, Python, жемчуг может быть расположен в различных местах в файловой системе, сценарии часто имеют хижину, которая использует env
для мобильности, например. #!/usr/bin/env zsh
. Однако как http://en.wikipedia.org/wiki/Shebang_ (Unix), который объясняет #Portability, много систем включая Linux не позволяют передачу аргументов интерпретатору.
Часто, я хотел бы сделать что-то как #!/usr/bin/env zsh -f
предотвратить мой сценарий, чтобы когда-либо считать мой ~/.zshenv
, или я хотел бы сделать #!/usr/bin/env perl -w
, и т.д. Это работает над OS X, но не над Linux.
Каково обходное решение для этого? Могу я иметь лучший из обоих миров: мобильность и аргументы в пользу интерпретатора? Если возможно, дайте общее обходное решение, которое работает на все интерпретаторы, не просто zsh.
Вот встроенное решение работать вокруг проблемы мобильности на ZSH.
#! /bin/sh
if [ -z "$IN_ZSH" ]; then
export IN_ZSH=1
exec zsh -f "$0" "$@"
fi
## Your ZSH script here
Некоторые другие методы для попытки включают
--options
такой как выполнение#! /usr/bin/env POSIXLY_CORRECT=1 bash
#! /bin/sh # \ TCLBIN=/usr/bin/tclsh; \ exec $TCLBIN "$0" "$@" # Execute the rest via tclsh set argc
--options
быть переданным в не влияет на поведение загрузки#! /usr/bin/env bash # Exit if any error detected set -e
#! /usr/bin/env perl use warnings;
invoke.sh
сценарий вместо/usr/bin/env для использования ПУТИ, звонящего с /path/to/invoke.sh script
с Вашим сценарием, запускающимся с #! zsh -f
#! /bin/sh SCRIPT=$1 shift 1 cmd=`sed -n -e 's:#! \?::' -e '1p' $SCRIPT` exec $cmd $SCRIPT