>filename.txt 在 shell 脚本中做什么

>filename.txt 在 shell 脚本中做什么

我正在查看一个 shell 代码,发现这个命令是在其他 shell 代码之间编写的

>filename.txt 

我不知道这个命令的作用,所以我在桌面上尝试了一下。我制作了一个 shell 脚本,并在 shell 脚本中编写了此命令,当我运行该脚本时,我发现它没有执行任何操作。 >myfile.txt 这是做什么的?

答案1

正如你所写的那样没有什么在重定向符号之前>

>filename.txt

就是从字面上重定向 没有什么进入filename.txt。这通常是为了清除/擦除文本文件的内容。如果filename.txt尚不存在,则会创建它。

答案2

> file单独的是没有重定向命令的重定向。根据外壳的不同,它是:

  • 语法错误(Thompson shell csh、、、tcshfish
  • 它运行空命令zsh,请参阅info zsh NULLCMD),其输出重定向到file.
  • 它执行重定向(此处打开文件以使用截断 ( O_TRUNC)、with进行写入,如果设置了该选项,则O_CREAT可能使用 with ),但随后关闭相应的文件描述符而不执行任何操作,因为没有提供命令(类似于 Bourne 的 shell(除非除非在/仿真中),类似外壳)。O_EXCLnoclobberzshshkshrc

该代码很可能是为第三类 shell 编写的,其目的是截断该文件或使用空内容创建该文件。

更便携的方法是重定向不产生输出的命令:

printf '' > file

[ . ] > file

true > file # printf, [ and true are builtins in many shells

eval > file # eval is built-in in all shells but note that in POSIX ones, that
            # causes the shell to exit if the file can't be opened. Bourne-like
            # shells also have a ":" builtin with the same side-effect.

noclobber即使选项打开也强制截断:

true >! file # csh (where noclobber comes from), tcsh, zsh
true >| file # ksh/POSIX (and zsh)

答案3

该命令> myfile.txt将仅创建一个文件或清除文件内容(如果有)。

如果之前有命令,则此命令还将某些内容归因于 .txt 文件。例如,您想要创建一个包含文件夹内容的文件,这样您就可以执行以下操作ls -1 > myfile.txt:这将创建一个文件,其中按行包含文件和目录的名称。

您还可以将其用作脚本的日志文件,因此该命令不会在屏幕上显示输出,而是将输出保存在文件中。

答案4

没有像 filename.txt 这样的命令。它只是一个名为 filename 的文本文件。

正如你在标题中所问的

>filename.txt 在 shell 脚本中做什么

">" 用于将命令的输出重定向到文本文件中。例如,如果您在终端中运行以下命令

ifconfig > filename.txt

那么命令 ifconfig 的输出将不会显示在终端中。但将在您的工作目录中创建一个新文件,或者如果那里存在相同的文件,则将覆盖该新文件。您可以从文件 filename.txt 中读取该命令的输出。

相关内容