【问题标题】:Prevent a command in a shellscript from being executed inside another shellscript防止 shell 脚本中的命令在另一个 shell 脚本中执行
【发布时间】:2013-05-08 18:24:20
【问题描述】:

我在另一个shellscript中调用一个shellscript,被调用的有一个删除文件夹的命令,我不想被执行,像这样

$ rm ../temp -rf

有没有办法在不更改调用脚本内容的情况下阻止执行此命令?

【问题讨论】:

  • 也许使用 alias 不是一个好主意,它只能在交互式 shell 中工作,除非您在脚本中使用 shopt -s expand_aliases 更改默认行为,另请参阅:chiefsandendians.blogspot.co.uk/2010/07/…跨度>
  • 如果您无法更改该脚本,那么您应该仍然可以复制并修改它。

标签: shell unix command delete-file


【解决方案1】:

您可以在脚本中定义这样的别名:

alias rm='echo SAFE'

默认情况下,别名仅在交互式 shell 中起作用,因此您必须通过以下方式更改此行为:

shopt -s expand_aliases

在您的脚本中并获取另一个脚本(您无法更改的脚本):

source the_other_script.sh

. the_other_script.sh

除非其他脚本在子 shell 中运行 rm,否则这将起作用。

另一种更安全的方法是创建自己的rm 命令,它什么都不做(或者只是打印出它的参数以便你知道发生了什么),将它放入一个目录并将这个目录作为第一个目录放在@ 987654327@这样的环境变量(Korn shell语法):

$ export PATH=/path/to/your/dummy/rm/replacement:$PATH

【讨论】:

  • 谢谢,就这么简单!
  • 默认情况下,非交互式 shell 不会扩展别名。您调用的脚本不太可能激活别名扩展。
  • @chepner 好的,但是当你 source 另一个脚本时它应该可以工作,不是吗?
  • 这取决于您是从交互式外壳还是非交互式外壳中获取它。
  • @chepner 当您从使用shopt -s expand_aliases 修改默认行为的脚本中获取源代码时,它应该也可以工作。我修改了答案并添加了另一种方法。
猜你喜欢
  • 1970-01-01
  • 2013-09-22
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2022-10-21
相关资源
最近更新 更多