因为诸如 zsh、bash、python、perl 之类的解释器可能位于文件系统上的不同位置,所以脚本通常有一个env用于可移植性的 shebang ,例如#!/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
Run Code Online (Sandbox Code Playgroud)
其他一些尝试的方法包括
--options比如做#!/usr/bin/env POSIXLY_CORRECT=1 bash
#!/bin/sh
# \
TCLBIN=/usr/bin/tclsh; \
执行 $TCLBIN "$0" "$@"
# 其余的通过tclsh执行
设置参数
--options传入的不影响加载行为 #!/usr/bin/env bash
# 检测到错误则退出
设置 -e
#!/usr/bin/env perl
使用警告;
invoke.sh脚本而不是 /usr/bin/env 来使用您的 PATH,/path/to/invoke.sh script使用您的脚本开始调用#! zsh -f #!/bin/sh
脚本=$1
移位 1
cmd=`sed -n -e 's:#! \?::' -e '1p' $SCRIPT`
执行 $cmd $SCRIPT
| 归档时间: |
|
| 查看次数: |
3179 次 |
| 最近记录: |