要清空文件,您可以在 bash 命令行的开头键入 #> file.txt
并带有 >,但这里到底发生了什么或者 > 的输入是什么?
谢谢!
最佳答案
bash shell 中的任何重定向都由 bash 读取和实现。例如,当您执行 # ls >/tmp/ls.out
命令时,bash 会读取并解析该命令并识别重定向运算符 (>
)。 Bash 以写入模式打开 /tmp/ls.out
文件(如果文件存在,则会截断该文件)。然后bash
执行pipe()-dup2()-fork()-exec()
序列将ls
命令的STDOUT文件句柄映射到打开 /tmp/ls.out
文件的文件句柄。这样bash
就实现了重定向。
在您的情况下,bash
识别出 file.txt
是重定向目标并以写入模式打开它。 open() 调用(在写入模式下)会截断 file.txt
文件。然后 bash
找不到任何要执行的命令,并且不执行任何操作。
总而言之,由于 shell 以写入模式打开目标文件,因此现有文件会被截断。 Bash 不会执行任何特殊操作来截断文件。
关于bash ->(大于)在命令行开头的具体作用是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45410516/