Что делает следующую кошку commnad в среднем Unix?

Что делает следующую кошку commnad в среднем Unix? Я плохо знаком с Unix

cat test.txt | java myfilegrammar.pcfg > test1.txt 2> test2.txt
0
задан 11.08.2011, 06:59

7 ответов

Это передает содержание по каналу 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 файлы.)

3
ответ дан 24.11.2019, 02:39

Randal L. Schwartz наградил бы Ваш код Бесполезным использованием cat премия. Для получения дополнительной информации того, как каждый зарабатывает эту премию, и как ее можно избежать, см. http://sial.org/howto/shell/useless-cat/. Я просто заключу образец письма Randal L. Schwartz в кавычки для потомства.

И конечно, если Вы следовали вперед в течение недели или два, Вы знаете что это (Bing!) Бесполезное Использование CAT!

Rememeber, почти все случаи, где Вы имеете:

    cat file | some_command and its args ...

можно переписать его как:

    <file some_command and its args ...

и в некоторых случаях, такие как этот, можно переместить имя файла в arglist как в:

    some_command and its args ... file

Просто другое Бесполезное Использование Usenet,

(Нет, я не попытка быть оскорбительным; просто интересный. Если Вы перейдете по ссылкам, то на Ваш вопрос ответят.)

4
ответ дан 24.11.2019, 02:39
  1. Выведите содержание test.txt в стандартный вход для процесса, запущенного с помощью Java в качестве исполняемого файла с аргументами "myfile.java grammar.pcfg"
  2. Отобразите стандартный вывод выполнения Java в test1.txt
  3. Отобразите поток сообщений об ошибках в test2.txt
1
ответ дан 24.11.2019, 02:39

Ваш java программа читает вход из stdin и вход, который Вы хотите предоставить, находится в файле test.txt. Способ предоставить эти исходные данные состоит в том, чтобы поместить содержание text.txt файл к stdout и pipe это к stdin из java программа.

То же может быть сделано без использования cat как:

java myfile.java grammar.pcfg > test1.txt 2> test2.txt < test.txt 
1
ответ дан 24.11.2019, 02:39

Каждый процесс в Linux запускается с трех дескрипторов файлов по умолчанию:

  • 0-> Вход Stdandard
  • 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 обрабатывает стандартный вход.

1
ответ дан 24.11.2019, 02:39

отправьте содержание test.txt к "myfile.java grammar.pcfg" через стандартный вход. отправьте стандартный вывод myfile.java grammar.pcfg к test1.txt отправляют вывод стандартной погрешности myfile.java grammar.pcfg к test2.txt

0
ответ дан 24.11.2019, 02:39

это совпадает с

java myfile.java grammar.pcfg > test1.txt 2> test2.txt < test.txt

но с дополнительным процессом (cat) это считывает данные с test.txt и печатает их к стандартному выводу (который перенаправляется каналом | к стандартному входу java)

0
ответ дан 24.11.2019, 02:39

Теги

Похожие вопросы