在我的Bash CGI脚本中,我接受一个作为GET参数传递的命令并执行它。这可能是:
CMD='ls -al'
$CMD
哪种方法正常并产生预期的输出。但是如果我尝试用
传递两个命令CMD='ls -al; echo hello'
$CMD
或
CMD='ls -al && echo hello'
$CMD
两个命令都没有执行。
如何在bash CGI中从同一行/变量运行多个命令?
答案 0 :(得分:0)
您可以使用bash
执行变量作为bash代码:
# UNSAFE, DO NOT USE
cmd='ls -al; echo hello'
bash -c "$cmd"
或者,根据您要运行它的上下文,您可以使用eval "$cmd"
来运行它,就好像它是您自己脚本中的一行,而不是要执行的单独的shell代码: / p>
# UNSAFE, DO NOT USE
cmd='ls -al; echo hello'
eval "$cmd"
这两种方法都对安全性和正确性产生了严重影响,所以我觉得我必须添加警告,以防止它们被脱离上下文。
对于专门用于运行不安全用户输入的远程shell或root工具包,您可以忽略警告。