pipe - 在重定向到文件和管道到进程之间动态选择
问题描述
假设一个具有一般形式的 shell 脚本
(
# ... lots of code here
) > logfile 2>&1
有一个功能请求可选择将日志转储到终端以及文件,该文件将被写入
(
# ... lots of code here
) 2>&1 | tee logfile
问题是,如何根据 shell 变量的值在这两个管道结构之间切换?cat
理想情况下,在日志不进入终端的情况下,为了提高效率,不需要过程或类似的东西。
仅使用 POSIX shell 功能是一项硬性要求。此外,由于旧版本 zsh 中的错误,括号内的代码无法移动到 shell 函数中。
解决方案
我的看法是
(
# ... lots of code here
) 2>&1 |
if test "$want_terminal_output" = yes; then
tee logfile
else
cat > logfile
fi
是的,有一个(有用的!)cat
。单个程序的效率真的很关键吗?我明白为什么有人会认为它不美观。如果它伤害了您的眼睛,请在 shell 中编写一个读/写循环并对其进行分析。当然,你总是可以复制lots of code
和避免cat
使用在这个时代如此流行的剪切-粘贴编程方式:-)
推荐阅读
- ruby-on-rails - 无法加载此类文件 -- rails/commands (LoadError)
- python - ValueError when trying to use a function to resize an image
- arrays - 无法将迭代器转换为 js_sys::Array
- mysql - MySQL 索引 - Join 和 Order By 需要不同的索引
- pyspark - pyspark 中的 K-means 在 jupyter 笔记本中无限运行,在 zepplin 笔记本中运行良好
- apache-spark - Spark-HBase - GCP模板(1/3) - 如何本地打包Hortonworks连接器?
- python - 根据其他列创建新的数据框列
- mysql - 仅使用 VueJs 连接到数据库
- python - 如何遍历 JSON 对象?
- html - Xamarin 中的 Razor 模板