要清空文件,您可以使用>键入#> file.txt
。在bash的命令行的开头,但是这里到底发生了什么或者>?
谢谢!
答案 0 :(得分:2)
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没有做任何特殊的事情来截断文件。
答案 1 :(得分:0)
您声明您希望将任何内容(或null)的输出提供给名为“file.txt”的文件
因为你正在使用'>'与“>>”相反,您声明如果文件存在,则应首先替换该文件。