shell 如何在bash -c中运行任意命令?

fhg3lkii  于 12个月前  发布在  Shell
关注(0)|答案(2)|浏览(133)

我基本上想做bash -c "$@",但这不起作用(我的命令没有得到运行)。虽然eval "$@"工作正常,但有什么区别?
我想做这样的事情:
我的脚本:

function run_it() {
  bash -c "$@"
}

run_it $@

./myscript MY_VAR=5 make my-target
plicqrtu

plicqrtu1#

是因为你的引用。这样应该会更好:

function run_it() {
  bash -c "$*"  # Change 1
}

run_it "$@"     # Change 2

变更原因1:$@在引号内使用时是特殊的,如"$@"。它不是扩展到单个参数,而是扩展到一系列引用的参数:"MY_VAR=5" "make" "my-target"。结果,-c标志只接收MY_VAR=5部分,该部分分别以makemy-target作为参数$0$1执行。通过使用"$*",你最终得到了一个字符串。请注意,这仍然不能正确处理空格;不知道该怎么解决
变更原因二:在这里,我们确实希望每个参数都被单独引用。这可以确保参数不会过早分裂。这可能是毫无意义的,直到你解决其他空间的问题第一。

ioekq8ef

ioekq8ef2#

我们可以在子shell中使用eval。

function run_it() {
  (eval "$@")
}

run_it "$@"

相关问题