为什么bash重定向到文件是在追加模式下发生


Answers:


19

您缺少的是fexec调用中只打开(和截断)一次文件。这两个echo命令仅写入已打开的文件描述符。f因此,该文件不会被任何一个echo调用截断。

要将标准输出重定向到文件描述符,语法为>&n,其中n是一些小的正整数表示文件描述符(没有>>&n重定向)。文件描述符必须已经与打开的文件相关联,此功能才能起作用。这是打开文件并将其与描述符关联的操作exec 3>f,该操作exec 3>>f会截断文件(不会截断文件,而会在追加模式下打开文件)。仅使用with >&3不能打开文件,也不会截断它。

如果你做完了,那会不一样的

echo foo >f
echo bar >f
cat f

(每个都echo在打开和截断f),或更复杂的是,

exec 3>f; echo foo >&3
exec 3>f; echo bar >&3
exec 3>&- # close fd 3
cat f

(文件exec在每个之前被打开和截断echo)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.