如何在`bash -c`下执行任意命令

时间:2015-04-30 19:15:15

标签: bash

装饰任意bash命令以在子shell中执行它的过程是什么?我不能改变命令,我必须在外面装饰它。

我能想到的最好的是

>bash -c '<command>'

适用于这些:

>bash -c 'echo'
>bash -c 'echo foobar'
>bash -c 'echo \"'

但是诸如

之类的命令呢?
echo \'

特别是

echo \'\"

所有命令的装饰必须始终相同。它必须始终有效。

4 个答案:

答案 0 :(得分:2)

你说“subshel​​l” - 你可以通过在命令周围加上括号来获得其中一个:

x=outer
(x=inner; echo "x=$x"; exit)
echo "x=$x"

产生这个:

x=inner
x=outer

答案 1 :(得分:1)

这是不使用-c选项的一种方法:

bash <<EOF
echo \'\"
EOF

答案 2 :(得分:0)

您想要做的与PHP中的escapeshellcmd()完全相同(http://php.net/manual/fr/function.escapeshellcmd.php

你只需要逃避#&amp ;;`| *?〜&lt;&gt; ^()[] {} $ \,\ x0A和\ xFF。 &#39;和&#34;只有在没有配对时才会被转义。

但要注意安全问题......

答案 3 :(得分:0)

你可以(ab)使用heredocs:

bash -c "$(cat <<-EOF
    echo \'\"
EOF
)"