寻求更优雅的Bash简易FIFO队列单行取数实现方案
可移植Bash FIFO队列首行取出的优雅实现
你可以用纯Bash内置命令实现更简洁易懂的单行取出逻辑,无需依赖head/tail/sed等外部工具,同时保证跨系统可移植性:
# 取出队列首行并更新队列(纯Bash内置,单行实现) { read -r first_line; cat > "$fifo_queue"; } < "$fifo_queue" && echo "$first_line"
原理说明
{ read -r first_line; cat > "$fifo_queue"; } < "$fifo_queue":通过重定向让代码块读取队列文件内容- 第一步
read -r first_line读取文件第一行存入变量 - 第二步
cat > "$fifo_queue"将剩余所有内容写回原文件,直接完成队列的"出队"更新
- 第一步
&& echo "$first_line":操作成功后输出取出的首行内容
其他兼容式单行方案
如果习惯使用外部工具,也可以将原有逻辑合并为更紧凑的单行,同时保证可读性:
# 基于head/tail的单行合并版 first_line=$(head -n1 "$fifo_queue") && tail -n +2 "$fifo_queue" > "$fifo_tmp" && mv "$fifo_tmp" "$fifo_queue" && echo "$first_line"
或者用兼容GNU/BSD sed的版本:
# 基于sed的单行实现(兼容多系统) read -r first_line < "$fifo_queue" && sed -i.bak '1d' "$fifo_queue" && rm -f "$fifo_queue.bak" && echo "$first_line"
内容的提问来源于stack exchange,提问作者Marcel Sonderegger
相关产品推荐
相关产品推荐

