【发布时间】:2020-10-04 03:44:13
【问题描述】:
我当前的脚本如下所示:
#!/bin/bash
trap flush_buffer SIGUSR1
flush_buffer() {
echo "flushing buffer" >&2
[ -n "$buffer" ] && echo -e "$buffer"
buffer=""
}
trap exit_script INT TERM
exit_script() {
echo "script shutting down" >&2
flush_buffer()
}
while read -r line; do
[ -z "$buffer" ] && buffer="$line" || buffer="$buffer\n$line"
done
有这样的测试用例:
$(echo "ad-hoc run the script" | ./pipe-barrier.sh 2> /dev/null) == "ad-hoc run the script"
但这甚至都行不通。
这段代码在下列情况下的行为是否正确?
- 空白输入
- 缓冲区刷新之间的大量输入
- 同时执行(脚本的多个实例同时运行)
感谢您的帮助:)
更新
#!/bin/bash
trap flush_buffer USR1
flush_buffer() {
echo "flushing buffer" >&2
[ -n "$buffer" ] && echo -e "$buffer"
buffer=""
}
trap exit_script EXIT
exit_script() {
echo "script shutting down" >&2
flush_buffer
exit 0
}
while read -r line; do
[ -z "$buffer" ] && buffer="$line" || buffer="$buffer\n$line"
done
【问题讨论】:
标签: bash pipe buffer barrier bash-trap