A variável PIPESTATUS está vazia

A variável PIPESTATUS está vazia

Estou trabalhando em um servidor Linux e percebi que a variável do array PIPESTATUS está sempre vazia. Estou no lançamento do bash v4.1.2(1)

$ echo $BASH_VERSION
4.1.2(1)-release
$ false | true | false
$ echo ${PIPESTATUS[@]} # returns nothing (empty)

Qual seria a razão? Verifiquei fóruns on-line, incluindo troca de pilha, mas não encontrei uma boa resposta

Responder1

Isso pode acontecer se $PIPESTATUStiver sido declarado como uma variável escalar ou qualquer coisa que não seja um array ou tenha sido tornado somente leitura, seja por você ou pelo código encontrado em ou através do seu ~/.bashrc/ ~/.bash_profile... ou porque existia PIPESTATUS=no ambiente quando bashfoi iniciado.

Você pode verificar o tipo, atributos e valor de $PIPESTATUSwith typeset -p PIPESTATUS.

Então $PIPESTATUSpermanece escalar e não é convertido automaticamente em array para armazenar os status de saída dos componentes do pipeline:

$ env PIPESTATUS= bash -c 'false | true; typeset -p PIPESTATUS'
declare -x PIPESTATUS=""
$ bash -c 'PIPESTATUS=; false | true; typeset -p PIPESTATUS'
declare -- PIPESTATUS=""
$ bash -c 'typeset -A PIPESTATUS; false | true; typeset -p PIPESTATUS'
declare -A PIPESTATUS
$ bash -c 'readonly PIPESTATUS; false | true; typeset -p PIPESTATUS'
declare -r PIPESTATUS

Exceto neste readonlycaso, isso pode ser contornado convertendo a variável de volta para array ou desativando-a:

typeset -a PIPESTATUS # beware it can affect the scope if run from a function
unset -v PIPESTATUS

informação relacionada