Como posso definir um código de retorno na linha de comando sem sair do meu cliente SSH?

Como posso definir um código de retorno na linha de comando sem sair do meu cliente SSH?

Sou realmente novo no Unix e atualmente preciso criar um alias que verifique se um arquivo é regular e legível. Se for irregular, preciso retornar 1 como código de saída e não testar se está legível. Se estiver ilegível, preciso retornar 2 como código de saída.

alias test="if [ ! -f filename ] ; then echo 'Irregular file'; exit 1 ; fi; if [ ! -r filename ]; then echo 'Unreadable file'; exit 2; fi;

O problema é que agora, quando eu executá-lo, a saída fechará todo o meu cliente. Alguma forma de contornar isso?

Responder1

Como este é o primeiro link ao fazer uma pesquisa no Google:

Se você colocar a saída entre colchetes

(exit 2)

então ele definirá um código de retorno saindo do subshell entre colchetes e não sairá do shell atual. Você pode então testar esse código usando $? normalmente

alias mytest="if [ ! -f filename ] ; then echo 'Irregular file'; (exit 1) ; elif [ ! -r filename ]; then echo 'Unreadable file'; (exit 2); fi"

Responder2

Uma função shell deve ser capaz de obter returnum valor que você goste:

checktype() {
    if [ ! -f "$1" ] ; then 
        echo 'Irregular file'
        return 1
    fi 
    if [ ! -r "$1" ]; then 
        echo 'Unreadable file'
        return 2 
    fi
    return 0
}
$ checktype /dev/stdin ; echo $?
Irregular file
1

Além disso, testé um nome horrível para um alias ou função, já que é um utilitário padrão (integrado).


Sei que o alias é uma escolha terrível, mas atualmente está sendo exigido por um professor.

Ok, isso muda um pouco as coisas. Minha sugestão seria mostrar ao professor uma solução mais adequada e explicar por que a simples não funciona.

Mas caso isso não funcione, e você realmentedeveuse um alias, considere que o valor de retorno é, na verdade, apenas o valor de retorno do último comando que foi executado. Você deve ser capaz de montar algo que retorne o valor que você deseja ...

(Se for lição de casa, não acho que seria justo fornecer uma solução completa imediatamente. Spoilers abaixo.)

Dica: você já usou um comando que retorna um valor arbitrário.

Responder3

aliasé uma má escolha aqui. Coloque essas linhas em um arquivo de script bash.

#!/bin/bash
if [ ! -f filename ];
 then echo 'Irregular file'; exit 1 ;
fi;
if [ ! -r filename ];
 then echo 'Unreadable file'; exit 2;
fi;

Funcionará conforme planejado.

informação relacionada