hola="cd /var && ssh localhost.error"
$hola
Quando você faz isso, a segunda linha faz com que você chame o comando cd
com os argumentos /var
, &&
, ssh
e localhost.error
. Cd ignora tudo, menos o primeiro argumento, e ele muda com sucesso para / var, por isso não imprime um erro.
Isso acontece por causa da ordem em que o bash processa as linhas de comando. Quando você digita cd /var && ssh localhost.error
, isso nos termos bash é uma lista de dois comandos s. Bash analisa listas em seus comandos separados e analisa cada comando. A expansão da variável ocorre durante a análise de comando, não na análise de lista.
Quando você executa $hola
, o analisador de lista o analisa como um único comando. o analisador de comandos é executado, expande a variável e vê o & &; mas não é especial para o analisador de comandos.
Você poderia tentar usar uma função de shell:
function hola { cd /var && ssh localhost.error; }