bash ->(大于)在命令行开头的具体作用是什么

标签 bash command-line

要清空文件,您可以在 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/

相关文章:

java - java 帮助中的命令行参数

linux - 从 linux 中的多列创建表,但将字段 2、3(也可能是 4)视为一列

linux - 代码/模块,用于评估要在 Linux 上的 awk 或 bash 中使用的 bool 表达式

bash - 通过 grep 管道尾部时没有输出

bash - SED:在范围末尾追加一行

c# - 如何从 C# Windows 窗体中运行命令行代码?

node.js:使用用户输入作为命令行参数是否安全?

java - 如何用命令行编译并运行Stanford的Karel?

powershell - 如何使用 CMD 从服务器本身查找计算机对象 OU

bash - 即使在我的路径上,也无法从命令行执行gradle