Unix 中的以下 cat 命令是什么意思?我是 Unix 新手
cat test.txt | java myfilegrammar.pcfg > test1.txt 2> test2.txt
答案1
它将 的内容通过管道传输test.txt
到 的输入java myfile.java grammar.pcfg
,然后将该java
命令的输出流重定向到test1.txt
并将其错误流重定向到test2.txt
。
如果用括号括起来,您可能会发现它会更容易理解,就像这样(请注意,这只是为了清楚起见,并不是有效的语法):
(cat test.txt | java myfile.java grammar.pcfg) > test1.txt 2> test2.txt
这样更清楚地表明,第一个文本文件是输入文件,而后两个是输出文件。
(但是,这java myfile.java
一点对我来说确实没有意义——java
是在 .class 文件上调用,而不是 .java 文件。)
答案2
Randal L. Schwartz 将奖励您的代码cat
奖项无用。有关如何获得该奖项以及如何避免的更多信息,请参阅http://sial.org/howto/shell/useless-cat/. 我仅引用 Randal L. Schwartz 的格式信以供后人参考。
当然,如果你已经关注了一两个星期,你就会知道这(BING!)是 Cat 的无用用途!
请记住,几乎所有的情况都是:
cat file | some_command and its args ...
您可以将其重写为:
<file some_command and its args ...
在某些情况下,比如这种情况,您可以将文件名移动到参数列表中,如下所示:
some_command and its args ... file
这只是 Usenet 的又一个无用用途,
(不,我不是想侮辱;只是想娱乐一下。如果你点击链接,你的问题就会得到答案。)
答案3
- 将 test.txt 的内容转储到使用 java 作为可执行文件启动的进程的标准输入中,并使用参数“myfile.java grammar.pcfg”
- 将java执行的标准输出映射到test1.txt中
- 将错误流映射到 test2.txt 中
答案4
Linux 中的每个进程默认启动时都有三个文件描述符:
- 0 -> 标准输入
- 1 -> 标准输出
- 2 -> 标准错误
如果您看到重定向,即fd_number > some_file.txt
,它表明通常会打印到保存文件描述符的文件的任何内容fd_number
现在将被重定向到其之后的任何内容。
您给出的命令也可以写成:
cat test.txt | java myfile.java grammar.pcfg 1> test1.txt 2> test2.txt
或者:
java myfile.java grammar.pcfg 0< test.txt 1> test1.txt 2> test2.txt
...取决于 myfile.java 如何处理标准输入。