Bash shell 抛出的随机错误:无法打开命名管道

Joh*_*mit 5 bash pipe aix

我发现记录我运行的每个命令的详细日志,我从哪个路径运行它以及我从哪个用户那里执行命令,随着时间的流逝,我正在努力记住我所做的事情是非常有价值的。前段时间,在浏览了本网站以及其他网站上的各种文章后,我想出了一个非常有效的解决方案。这是我的 .bashrc 中的内容:

SUDOUSER=`who am i | awk '{print $1}'`
SUDOIP=`who am i | awk '{print $6}'`
DT=`date +"%Y%m%d%H%M%S"`

export HISTCONTROL=ignoredups
export HISTFILE=~/.history
DETAILHISTORY=~/.historydetail

echo $DT $SUDOUSER:$SUDOIP[$$] \|\|\| $(finger $SUDOUSER | head -1) logged in on $(date) \|\|\| >> $DETAILHISTORY
export PROMPT_COMMAND='trap "" 1 2 15; DT=`date +"%Y%m%d%H%M%S"`; history -a >(tee -a ~/.bash_history | while read line; do cwd=$(echo "$cwd" | sed "s|$HOME|~|g"); if [[ $line =~ ^#[0-9]*$ ]]       ; then continue; fi; echo "$DT $SUDOUSER:$SUDOIP[$$] {$cwd} $line" >> $DETAILHISTORY; done); if [[ $(history 1) == "cd" ]]; then cwd=$OLDPWD; else cwd=$PWD; fi; trap 1 2 15;'
Run Code Online (Sandbox Code Playgroud)

我得到这样的输出:

20180919150704 MyUsername:(192.168.24.207)[14090280] ||| Login name: MyUsername In real life: MyName logged in on Wed Sep 19 15:07:04 EDT 2018 |||
20180919150704 MyUsername:(192.168.24.207)[14090280] {~} clear
20180919150708 MyUsername:(192.168.24.207)[14090280] {~} cd user_scripts/
20180919150708 MyUsername:(192.168.24.207)[14090280] {~/user_scripts} ll
20180919150714 MyUsername:(192.168.24.207)[14090280] {~/user_scripts} cat file.sh
20180919151013 MyUsername:(192.168.24.207)[14090280] {~/user_scripts} cd
20180919151015 MyUsername:(192.168.24.207)[14090280] {~} cat .bashrc
Run Code Online (Sandbox Code Playgroud)

极好的!它多次挽救了我的理智。

然而,也有不利的一面。每隔一段时间,我就会突然收到这条消息:

bash: cannot open named pipe /tmp//sh-np.5ARMam for reading: A system call received an interrupt.
Run Code Online (Sandbox Code Playgroud)

有时我会一次得到一大堆:

bash: cannot open named pipe /tmp//sh-np.4QRMal for reading: A system call received an interrupt.
bash: cannot open named pipe /tmp//sh-np.zqRMaj for reading: A system call received an interrupt.
bash: cannot open named pipe /tmp//sh-np.y7RMai for reading: A system call received an interrupt.
bash: cannot open named pipe /tmp//sh-np.6ARMan for reading: A system call received an interrupt.
Run Code Online (Sandbox Code Playgroud)

我看不出有任何押韵或理由;有时当我调整腻子/终端窗口的大小时会发生这种情况,我不明白。这在我添加详细的历史记录时开始发生(并在我禁用它时停止)。

任何人都可以猜测 PROMPT_COMMAND 中记录的历史记录的哪一部分可能导致此问题,甚至更好地如何防止它?