我有一个接受插件的库。这些插件是 shell 脚本。我想防止插件更改脚本中任何命令的当前工作目录。
我能做的一件事是以某种方式通过 makecd
或imilar 进入某种无操作来防止更改目录。这似乎是一个坏主意,而且也许是专制/太严厉的。
我可以做的另一件事是强制插件通过一套测试,并在这些测试中以某种方式检测脚本中目录的更改。 (如果发出更改目录命令,则测试失败)。
我的问题是 - 有没有好的方法防止cd'ing(以及类似的命令......它们是什么?),或者检测shell脚本中的CD?
答案1
使用plugins-run-in-subshell方法(尽管这主要有缺点,主要是关于插件是否需要在父级中破坏状态),那么插件可以发出chdir
它想要的任何调用,因为这不会更改父级的工作目录:
assumethisistheplugincode() {
cd /tmp
pwd
}
cd /var/tmp || exit 1
printf "before "
pwd
# and this is how we run a "plugin", in a subshell...
( assumethisistheplugincode )
printf "after "
pwd
答案2
更简单的方法
将脚本复制到无法“转义”的目录中
执行脚本:
chroot /directory /bin/bash ./script.sh