在运行脚本时,如何确保没有从父项继承的意外函数?如果使用bash,
#!/bin/bash -p
将通过env -i调用脚本来完成这个技巧 . 但我不能依赖用户调用env,我不想依赖bash,我不想做exec-hack并重新执行脚本,并且
#!/usr/bin/env -i sh
不起作用 .
所以我正在寻找一种可移植的方式(portable == posix)来确保用户没有定义意外修改脚本行为的函数 . 我目前的解决方案是:
eval $( env | sed -n '/\([^=]*\)=(.*/s//\1/p' |
while read -r name; do echo unset -f $name\;; done )
但这很丑陋,而且可靠性很高 . 有没有一种很好的方法来获得'unset -f -a'应该提供的功能?
edit
稍微不那么难看,但没有更好(我不喜欢解析env的输出):
unset -f $( env | sed -n '/\([^=]*\)=(.*/s//\1/p' | tr \\012 \ )
2 回答
结果是:
与...一样:
和“sh”是posix ...
编辑:
测试了一些功能 - 在我的情况下不需要取消设置...
EDIT2:
比较“set”的输出,而不仅仅是“env”
EDIT3:
以下示例 - “set | wc”的输出也给出相同的结果:
如何使用以下
env
shebang行设置合理的PATH
变量来调用sh
解释器: