O status de saída / saída é 0, enquanto o esperado é 255

2

Tenho um código que usei para os testes

hola="cd /var && ssh localhost.error" $hola echo $?

Executando apenas

cd /var && ssh localhost.error

retornará o código 255.

Mas executando

hola="cd /var && ssh localhost.error" $hola

retorna 0, enquanto esperado 255.

hola="ssh localhost.error" $hola

retorna 255.

Por quê?

    
por nkamm 01.10.2014 / 17:18

2 respostas

1
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; }
    
por 01.10.2014 / 18:24
0

Pode ter algo a ver com o fato de você não estar executando o comando na mesma linha, mas salvando a cadeia com o comando e, em seguida, chamando a variável que contém essa cadeia.

Tente isso:

hola=$(cd /var && ssh localhost.error)
echo $hola

Isso deve retornar 255 ou qualquer código de erro esperado.

Veja este exemplo:

> hola="echo hi"
> $hola
hi
>echo $?
0

> hola="hi"
> $hola
ksh: hi:  not found
> echo $?
127
    
por 01.10.2014 / 17:37

Tags