如何在干净的环境中启动脚本?

bal*_*lki 17 bash shell-script env

我尝试了以下但它似乎不起作用:

$ cat script.sh
#!/bin/env -i /bin/sh

/bin/env
$ script.sh
/bin/env: invalid option -- ' '
Try `/bin/env --help' for more information.
Run Code Online (Sandbox Code Playgroud)

phe*_*mer 10

这不工作的原因是因为它认为-i /bin/sh作为一个参数env。通常这将是 2 个参数,-i并且/bin/sh. 这只是shebang的一个限制。没办法。


但是,您仍然可以执行此任务,只是方式不同。

如果您希望此任务由脚本本身执行,而不必执行诸如 之类的操作env -i script.sh,则可以让脚本本身重新执行。

#!/bin/sh
[ -z "$CLEANED" ] && exec /bin/env -i CLEANED=1 /bin/sh "$0" "$@"
Run Code Online (Sandbox Code Playgroud)

如果CLEANED未设置环境变量,这将导致脚本重新执行自身。然后在重新执行时,它设置变量以确保它不会进入循环。

  • 刚试过。它也适用于原始问题。只需使用`#!/usr/bin/env -S -i /bin/sh`。请注意便携性问题。 (2认同)