저는 Linux 서버에서 작업 중인데 PIPESTATUS 배열 변수가 항상 비어 있는 것을 발견했습니다. 저는 bash v4.1.2(1) 릴리스를 사용하고 있습니다.
$ echo $BASH_VERSION
4.1.2(1)-release
$ false | true | false
$ echo ${PIPESTATUS[@]} # returns nothing (empty)
이유가 무엇일까요? 스택 교환을 포함한 온라인 포럼을 확인했지만 좋은 답변을 찾지 못했습니다.
답변1
$PIPESTATUS
스칼라 변수로 선언되었거나 배열이 아니거나 읽기 전용으로 설정된 경우, 사용자나 ~/.bashrc
/ ...에서 찾은 코드 또는 시작 시 환경에 ~/.bash_profile
있었기 때문에 이런 일이 발생할 수 있습니다 .PIPESTATUS=
bash
$PIPESTATUS
의 유형, 속성, 값을 확인할 수 있습니다 typeset -p PIPESTATUS
.
그런 다음 $PIPESTATUS
스칼라를 유지하고 파이프라인 구성 요소의 종료 상태를 저장하기 위해 자동으로 배열로 변환되지 않습니다.
$ 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
이 경우를 제외하고 readonly
변수를 다시 배열로 변환하거나 설정을 해제하여 문제를 해결할 수 있습니다.
typeset -a PIPESTATUS # beware it can affect the scope if run from a function
unset -v PIPESTATUS