Pav*_*van 3 linux shell bash pipe
我在 Linux 服务器上工作,注意到 PIPESTATUS 数组变量始终为空。我在 bash v4.1.2(1)-release
$ echo $BASH_VERSION
4.1.2(1)-release
$ false | true | false
$ echo ${PIPESTATUS[@]} # returns nothing (empty)
Run Code Online (Sandbox Code Playgroud)
可能是什么原因?我检查了包括堆栈交换在内的在线论坛,但没有找到好的答案
这可能发生,如果$PIPESTATUS
已经被宣布为一个标量或任何不是一个数组或已取得只读,无论是由您或代码或通过你的发现~/.bashrc
/ ~/.bash_profile
...或者因为有PIPESTATUS=
环境时bash
开始。
您可以检查$PIPESTATUS
with的类型、属性和值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
Run Code Online (Sandbox Code Playgroud)
除了这种readonly
情况,可以通过将变量转换回数组或取消设置来解决这个问题:
typeset -a PIPESTATUS # beware it can affect the scope if run from a function
Run Code Online (Sandbox Code Playgroud)
unset -v PIPESTATUS
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38 次 |
最近记录: |