带有空格的 shell 参数作为文件而不是命令传递

带有空格的 shell 参数作为文件而不是命令传递

我读过这个问答,但似乎总是将参数视为文件。

我想将命令diff <(ls old) <(ls new)这个链接一个接收两个参数的函数,尽管它有点多余。

我尝试了这只是 arg 替换:

d2c(){
        diff <($1) <($2)
}

然后运行d2c "objdump -d foo1" "objdump -d foo2"节目d2c:1: no such file or directory: objdump -d foo1

先进先出,以上问题依然存在。

问:如何传递像“objdump -d foo1”这样的arg,然后让它作为命令运行?

答案1

看起来您想要将它们$1解释$2为 shell 代码,而不是要执行的命令的名称,因此您需要:

d2c() {
  diff <(eval " $1") <(eval " $2")
}

(请注意前导空格以避免名称以 开头的命令出现问题-)。

您还需要确保在传递这些代码时使用单引号而不是双引号,以d2c消除引入命令注入漏洞的风险。

d2c 'echo "$var1"' 'echo "$var2"; echo "$var3"'

不是

d2c“回显$ var1”“回显$ var2;回显$ var3”

例如。

相关内容