装饰任意bash命令以在子shell中执行它的过程是什么?我不能改变命令,我必须在外面装饰它。
我能想到的最好的是
>bash -c '<command>'
适用于这些:
>bash -c 'echo'
>bash -c 'echo foobar'
>bash -c 'echo \"'
但是诸如
之类的命令呢?echo \'
特别是
echo \'\"
所有命令的装饰必须始终相同。它必须始终有效。
答案 0 :(得分:2)
你说“subshell” - 你可以通过在命令周围加上括号来获得其中一个:
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
)"