将引号和完整字符串传递给 bash -c 或 zsh -c

将引号和完整字符串传递给 bash -c 或 zsh -c

当我在 Perl 中调用 时system(some_command),这会调用some_commandon /bin/sh。我希望它some_command在另一个 shell 中运行,例如bashzsh

zsh在其上运行命令或bash从中运行命令的一种方法sh是调用zsh -c '<command>'.想法是将其传递给system(),但这需要在 周围使用单引号<command>

但如果<command>其中已经有引号怎么办?我如何将其传递给zsh -c?例如:

find . -name 'something*.txt'

上面的例子仅用于说明目的。另一个例子是当我需要将带有引号的内容传递给我想要从bashor调用的二进制文件时zsh

答案1

使用system LIST,它不调用 shell。 IE

system('/bin/bash', '-c', $your_command);

代替

system("/bin/bash -c '$your_command'");

答案2

既然你使用 Perl,你不限于单引号和双引号:

system q{bash -c 'echo "Hello World"'};

相关内容