Use system LIST , que não invoca um shell. ou seja,
system('/bin/bash', '-c', $your_command);
em vez de
system("/bin/bash -c '$your_command'");
Quando estou em Perl e chamo system(some_command) , isso chama some_command on /bin/sh . Eu gostaria que fosse executado some_command em outro shell, como bash ou zsh .
Uma maneira de executar comandos em zsh ou bash de sh é chamar zsh -c '<command>' . A ideia seria passar isso para system() , mas isso requer o uso de aspas simples em torno de <command> .
Mas e se <command> já tiver citações? Como faço para passá-lo para zsh -c ? Por exemplo:
find . -name 'something*.txt'
O exemplo acima é apenas para fins ilustrativos. Outro exemplo seria quando eu preciso passar algo com aspas para um binário que eu quero invocar de bash ou zsh .
Use system LIST , que não invoca um shell. ou seja,
system('/bin/bash', '-c', $your_command);
em vez de
system("/bin/bash -c '$your_command'");
Como você está em Perl, você não está limitado a aspas simples e duplas :
system q{bash -c 'echo "Hello World"'};