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

0

Sou muito novo no Unix e, atualmente, preciso criar um alias que verifique se um arquivo é regular e legível. Se for irregular, então eu preciso retornar 1 como o código de saída e não testar se é legível. Se for ilegível, preciso retornar 2 como o 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 agora é quando eu o executo, a saída fechará todo o meu cliente. Alguma maneira de contornar isso?

    
por Tommy 02.10.2016 / 21:59

2 respostas

1

Uma função de shell deve ser capaz de return de um valor que você gosta:

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 ruim para um alias ou uma função, já que é um utilitário padrão (interno).

I realize that alias is an awful choice, but currently it's being required by a professor.

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

Mas, caso isso não funcione e você realmente precise usar 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 criar algo que retorne um valor que você quer ...

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

Hint: You already used a command that returns an arbitrary value.

    
por 02.10.2016 / 22:09
0

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á como pretendido.

    
por 02.10.2016 / 22:05