La variable PIPESTATUS está vacía

La variable PIPESTATUS está vacía

Estoy trabajando en un servidor Linux y noté que la variable de matriz PIPESTATUS siempre está vacía. Estoy en la versión bash v4.1.2(1)

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

¿Cuál podría ser la razón? Revisé foros en línea, incluido el intercambio de pilas, pero no encontré una buena respuesta.

Respuesta1

Eso puede suceder si $PIPESTATUSse ha declarado como una variable escalar o cualquier cosa que no sea una matriz o se haya hecho de solo lectura, ya sea por usted o por el código encontrado en o a través de su ~/.bashrc/ ~/.bash_profile... o porque había PIPESTATUS=en el entorno cuando bashse inició.

Puede comprobar el tipo, los atributos y el valor de $PIPESTATUScon typeset -p PIPESTATUS.

Luego $PIPESTATUSpermanece escalar y no se convierte automáticamente en una matriz para almacenar los estados de salida de los componentes de la tubería:

$ 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

Excepto en este readonlycaso, esto se puede solucionar volviendo a convertir la variable en una matriz o desconfigurándola:

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

información relacionada