小编And*_*ron的帖子

bash 重定向中的意外行为

在 bash 中使用重定向时,我发现了一个奇怪且完全出乎意料的行为,即使我设法解决它,我也想知道它为什么会发生。

如果我运行这个命令:{ echo wtf > /dev/stdout ; } >> wtf.txtN 次,我希望看到填充了 N 个“wtf”的行。我在文件中找到的是一行。

我认为由于第一个命令是在 truncate 模式下打开 /dev/stdout,然后该模式由第二个文件描述符(wtf.txt)继承,然后被完全擦除,但我想知道你们中的一些人可能会更好地解释它,如果这是正确的行为还是错误。

为了清楚起见,我使用的命令是不同的,但是使用echo示例更容易理解。原始命令是一个需要输出文件作为参数的命令,因为我想要 stdout 上的输出,所以我将/dev/stdout作为参数传递。可以使用命令验证相同的行为openssl rand -hex 4 -out /dev/stdout >> wtf.txt

最后,我设法通过以下方式解决了将附加操作委托给tee的问题的解决方案:{ echo wtf > /dev/stdout } | tee -a wtf.txt > /dev/null

bash

5
推荐指数
1
解决办法
81
查看次数

标签 统计

bash ×1