我正在查看一个 shell 代码,发现这个命令是在其他 shell 代码之间编写的
>filename.txt
我不知道这个命令的作用,所以我在桌面上尝试了一下。我制作了一个 shell 脚本,并在 shell 脚本中编写了此命令,当我运行该脚本时,我发现它没有执行任何操作。 >myfile.txt 这是做什么的?
答案1
正如你所写的那样没有什么在重定向符号之前>
:
>filename.txt
就是从字面上重定向 没有什么进入filename.txt
。这通常是为了清除/擦除文本文件的内容。如果filename.txt
尚不存在,则会创建它。
答案2
> file
单独的是没有重定向命令的重定向。根据外壳的不同,它是:
- 语法错误(Thompson shell
csh
、、、tcsh
)fish
- 它运行空命令(
zsh
,请参阅info zsh NULLCMD
),其输出重定向到file
. - 它执行重定向(此处打开文件以使用截断 (
O_TRUNC
)、with进行写入,如果设置了该选项,则O_CREAT
可能使用 with ),但随后关闭相应的文件描述符而不执行任何操作,因为没有提供命令(类似于 Bourne 的 shell(除非除非在/仿真中),类似外壳)。O_EXCL
noclobber
zsh
sh
ksh
rc
该代码很可能是为第三类 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 中读取该命令的输出。