0

我有一个这样的shell脚本

cat file1.dat 2> file2.log

有人可以解释是什么意思。我搜索了很多,但没有找到任何东西。我检查了这个猫文档。但是没找到这个2>。我是shell脚本的新手。感谢任何帮助。

4

4 回答 4

2

2>表示重定向文件描述符 2,通常是 stderr。而没有 2 它是标准输出。

于 2013-11-07T20:47:55.087 回答
2

这就是说,发送cat file1.dat通常会发送到的输出/dev/stderrfile2.log

本质上,cat file1.dat 2> file2.log将打印到 STDERR 的所有文本发送到file2.log.

以下是一些其他示例:

cat file1.dat 1> file2.log # send STDOUT to file2.log   
cat file1.dat 1>&2 # send STDOUT to STDERR
cat file1.dat &> file2.log # send both STDERR and STDOUT to file2.log
cat file1.dat 2>&1 # send STDERR to STDOUT

而且,根据您的 shell,可能支持更高级的 I/O 重定向。

于 2013-11-07T20:50:19.120 回答
1

2>是一个壳结构。你不会在cat文档中找到它。

通常(在 shell 上下文中),><字符表示重定向。箭头用于显示流程,在您的情况下,从第一个 cmd 到file2.txt. shell 脚本中也有比较上下文,所以<在其他情况下意味着小于和>大于。

在这种情况下2>,意味着将标准错误输出重定向到file2.txt

这似乎是一个奇怪的结构。请注意,此代码将仅捕获错误消息。获取错误消息的通常方法cat是该文件不存在。

此代码的另一个问题是单个>指示“创建一个新的 file2.txt”(即使已经存在)

出于您的目的,这可能就足够了。在许多情况下,人们希望查看活动历史。在这种情况下,您希望使用append重定向的形式,使用2>> file2.txt.

需要更多地了解这里的上下文,以便对您继承的代码为何如此设置做出任何进一步有意义的评论。

IHTH

于 2013-11-07T20:52:51.583 回答
1

2>是 shell 语法,所以你应该查看你的 shell 文档。它可以与任何命令一起使用,而不仅仅是cat. 它重定向文件描述符 2,这是标准错误流。

cat如果您的命令有任何错误(file1.dat不存在,或者您没有读取它的权限,或其他任何内容),那么来自的错误消息cat将进入file2.log而不是您的终端(或 shell 的错误流所在的任何地方最初连接)。

于 2013-11-07T20:50:10.550 回答