Unix 中以下 cat 命令是什么意思?

Unix 中以下 cat 命令是什么意思?

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

  1. 将 test.txt 的内容转储到使用 java 作为可执行文件启动的进程的标准输入中,并使用参数“myfile.java grammar.pcfg”
  2. 将java执行的标准输出映射到test1.txt中
  3. 将错误流映射到 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 如何处理标准输入。

相关内容