Se você estiver usando bash
, a maneira mais fácil de salvar um comando exatamente é colocá-lo em uma matriz. Se o comando que você deseja executar for:
example -options "-i filename"
você pode salvá-lo em uma variável de matriz com:
commandline=(example -options "-i filename")
Em seguida, você pode executar o comando salvo exatamente como está @, expondo a matriz entre aspas duplas:
"${commandline[@]}"
A principal coisa a saber aqui é que o shell trata caracteres de aspas ( "'\
) de maneira diferente quando digitado diretamente na linha de comando a partir de quando os encontra dentro de uma expansão variável como em seu ${commandstring}
. Na linha de comando, os caracteres de citação têm uma função de citação especial. Dentro de uma expansão de parâmetro, eles são apenas caracteres normais não especiais. Portanto, "-i filename"
é uma única palavra quando digitado na linha de comando que é analisada como -i filename
, mas os mesmos caracteres em uma variável expandem para as palavras "-i
e filename"
.
BashFAQ 50 aborda este tópico com muito mais detalhes.