A passagem de aspas e cadeias completas para bash -c ou zsh -c

3

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 .

    
por Amelio Vazquez-Reina 24.05.2013 / 21:27

2 respostas

9

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'");
    
por 24.05.2013 / 21:55
1

Como você está em Perl, você não está limitado a aspas simples e duplas :

system q{bash -c 'echo "Hello World"'};
    
por 24.05.2013 / 21:56

Tags