什么> (大于)在命令行的开头完全执行

时间:2017-07-31 08:11:44

标签: bash command-line

要清空文件,您可以使用>键入#> file.txt。在bash的命令行的开头,但是这里到底发生了什么或者>?

的输入是什么

谢谢!

2 个答案:

答案 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”的文件

因为你正在使用'>'与“>>”相反,您声明如果文件存在,则应首先替换该文件。