Por exemplo, enquanto isso funciona:
$ echo foo foo
Isto não:
$ / bin / sh -c eco eco
Considerando que isto faz:
$ / bin / sh -c 'echo foo; barra de eco ' foo Barra
Existe uma explicação?
shell
command-line
arguments
echo
SilverlightFox
fonte
fonte
sh -c 'echo $1' echo foo
sh -c 'echo "$@"' fnord a b c d ...
sh -c 'echo $0' foo
não é a melhor opção, tendo em conta que o interlocutor já sabe que/bin/sh -c 'echo foo; echo bar'
funciona, você pode simplesmente responder citando o comando/bin/sh -c 'echo foo'
Isso chama
echo
com o argumento foo e foo é impresso.Isso chama o shell com o argumento
echo
e fornece foo como argumento$0
. Aecho
saída é uma nova linha e você descarta o foo . Se você deseja gerar foo , cite o argumento:ou use o argumento fornecido:
Neste exemplo
O shell é invocado com o argumento
echo foo; echo bar
que gerafonte
Neste comando:
echo
é o binário (ou comando interno) efoo
é o primeiro argumento.Aqui:
/bin/sh
é o binário, cujo primeiro argumento é-c
, que aceita uma "sequência de comandos" como parâmetro. Isso estáecho
no exemplo acima. Depois, há um terceiro argumento:foo
que é um argumento para/bin/sh
, não paraecho
. É por isso que no seu terceiro exemplo:... ambos são impressos. Você citou o argumento. Assim: o primeiro argumento é
-c
, e o parâmetro para esse argumento é o'echo foo; echo bar'
que é interpretado inteiro como um argumento; como a "cadeia de comandos".fonte
A estrutura
sh -c word
executa apenas a palavra (em um shell).As palavras adicionadas significam outras coisas, como argumento zero, um, dois, etc .:
para manter um comando que tenha espaços como uma palavra, é necessário citar:
então, isso imprime todos os argumentos:
Exemplos
No exemplo que você apresenta:
/bin/sh -c echo foo
A primeira palavra (depois das opções) éecho
, é isso que é executado. E um eco sem texto imprimirá apenas uma nova linha, nada mais:É por isso que você recebe uma linha vazia.
Se você citar o espaço, estará executando "uma palavra" (sem espaços), como este:
Conclusão
Mantenha o comando executado como uma "palavra" usando aspas.
fonte