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"'};