防止或检测 shell 脚本中的更改目录操作

防止或检测 shell 脚本中的更改目录操作

我有一个接受插件的库。这些插件是 shell 脚本。我想防止插件更改脚本中任何命令的当前工作目录。

我能做的一件事是以某种方式通过 makecd或imilar 进入某种无操作来防止更改目录。这似乎是一个坏主意,而且也许是专制/太严厉的。

我可以做的另一件事是强制插件通过一套测试,并在这些测试中以某种方式检测脚本中目录的更改。 (如果发出更改目录命令,则测试失败)。

我的问题是 - 有没有好的方法防止cd'ing(以及类似的命令......它们是什么?),或者检测shell脚本中的CD?

答案1

使用plugins-run-in-subshel​​l方法(尽管这主要有缺点,主要是关于插件是否需要在父级中破坏状态),那么插件可以发出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

相关内容