Por que recebo um erro quando estou citando aspas simples em um script que inicia um comando SSH remoto?

3

Eu tenho este script:

port=$1
cmd=$2
ssh [email protected] -p $port "'"$cmd"'"

Ao executar myscript.sh 1000 "ls /dev/shm" , ele recebe este erro:

bash: ls /dev/shm: No such file or directory

No script, se eu fizer o eco do comando (para ver como ele é avaliado) assim:

echo ssh [email protected] -p $port "'"$cmd"'"

Eu entendo isso:

echo ssh [email protected] -p $port "'"$cmd"'"

Qual é o comando adequado ... Então, o que é que estou perdendo aqui?

Obrigado.

    
por TCZ8 23.09.2014 / 18:01

1 resposta

4

Acabamos de descobrir como consertar o problema, então aqui está o guia:

Como solucionar problemas de comandos que não serão executados corretamente em um script

aka

Como ver exatamente o que está sendo executado pelo shell

No script, inclua seu comando problemático com o comando set:

set -x #unhide debug info
your command
set +x #hide debug info

No meu exemplo anterior, foram port=1000 e cmd="ls /dev/shm" :

ssh [email protected] -p $port "'"$cmd"'"

Foi realmente enviado para o shell e executado como:

ssh [email protected] -p 1000 ''\''ls' '/dev/shm'\'''

Olha só! Agora todos nós sabemos, as aspas duplas "" são na verdade uma citação simples hiperativa bipolar disfarçada apenas esperando na esquina para mexer com você ... e às vezes traz um amigo chamado Mr. barra invertida.

A solução foi usar aspas duplas no script:

ssh [email protected] -p $port "$cmd"

Quando combinado com as aspas duplas da linha de comando, as citações são traduzidas e executadas como aspas simples '' assim:

ssh [email protected] -p 1000 'ls /dev/shm'    

Quem sabia! você fez? bom para você!

Apenas uma outra maneira que nix mexe com a gente: P

    
por 23.09.2014 / 18:49