打击管屏障

时间:2019-06-09 20:48:33

标签: bash shell signals

对于作业,我必须在bash中编写具有以下行为的脚本:

  • 从stdin中读取逐行文本并将其存储在缓冲区中
  • 接收到SIGUSR1信号时,刷新缓冲区
  • 脚本关闭后,再次刷新

关机发生在以下情况: -stdin关闭 -脚本接收INT或TERM信号

我想到了:

echo "#!/bin/bash
buffer=""
while read line
do
  buffer="${buffer}line"
done < "${1:-/dev/stdin}"" >>pipe-barrier.sh

独自出门。我如何实现其余的目标? 预先感谢。

1 个答案:

答案 0 :(得分:0)

你的意思是那样的吗?

#!/bin/bash

trap flush_buffer EXIT TERM INT

flush_buffer() {
    [ -n "$buffer" ] && echo -e "$buffer"
    buffer=""
}    

while read -r line; do
    [ -z "$buffer" ] && buffer="$line" || buffer="$buffer\n$line"
done   

脚本对Ctrl-D,Ctrl-C和SIGUSR1做出反应