Comando que pode retornar código de erro em .bashrc

4

Eu gostaria de definir uma variável dentro de .bashrc para ser igual à saída de um comando que pode retornar um código de erro.

Eu não sei as implicações de fazer uma coisa dessas. Todo o resto funcionará corretamente, mesmo que este comando falhe?

O código em .bashrc atualmente é simplesmente:

export MYVAR=$(my_dubious_command 2>/dev/null)

É seguro fazer isso?

    
por Alberto Rivera 09.06.2017 / 19:13

2 respostas

2

Como l0b0 disse , é improvável que o seu .bashrc funcione com errexit set, mas você poderia cuidar dessa situação testando:

case $SHELLOPTS in
  (*errexit*)   set +e;
                export MYVAR=$(my_dubious_command 2>/dev/null);
                set -e
                ;;
  (*)           export MYVAR=$(my_dubious_command 2>/dev/null)
                ;;
esac

O comando export , conforme escrito, deve retornar 0, no caso de qualquer comando subseqüente verificar $? ; você não está fornecendo nenhuma opção inválida para ele, o nome da variável é válido e você não está exportando uma função inexistente.

A instrução case verifica se errexit está definido; Em caso afirmativo, ele desliga temporariamente para executar my_dubious_command .

    
por 09.06.2017 / 21:24
3

Vamos tentar:

$ var=$(false)
$ echo $?
1
$

No entanto, é improvável que você tenha errexit definido em seu .bashrc e ainda menos provável que o próximo comando verifique o código de saída de seu comando, portanto é muito improvável que ele afete qualquer coisa.

Scripts de inicialização como .bashrc são um lugar onde você não quer set -o errexit , porque você pode ser bloqueado fora do shell por um simples erro de digitação ou alterações que você não está controlando. Para detectar, mas não falhar por causa de erros, você pode, por exemplo, capturá-los:

$ trap 'echo $?' ERR
$ var=$(false)
1
$

Isso é bastante útil no prompt , por exemplo.

    
por 09.06.2017 / 20:24

Tags