Перенаправление ввода в тесте1 > тест2 >

#linux #bash #io-redirection

#линукс #удар #ввод-перенаправление

Вопрос:

Я пытаюсь понять, как работает перенаправление ввода, чтобы я мог смоделировать его в оболочке, которую я создаю. Допустим, мы создадим 3 файла:

 echo this is test 1 gt; test1 echo this is test 2 gt; test2 echo this is test 3 gt; test3  

А затем мы пытаемся перенаправить ввод и вывод с помощью такой команды, как cat test1 gt; test2 lt; test 3 . Содержимое test2 станет: this is a test1 . Я бы ожидал, что они станут this is a test 3 , так как это последняя «операция». Что я делаю не так? Заранее благодарю вас!

PS Если вы можете направить меня к руководству о том, как работает перенаправление при наличии сложных команд, подобных приведенной выше, я был бы признателен!

Комментарии:

1. cat не считывается из stdin, если у него есть аргументы, отличные от параметров. (Если только один из этих аргументов не указывает stdin)

Ответ №1:

cat не считывается из stdin, если у него есть аргументы, отличные от параметров, если только один из этих аргументов не указывает stdin. В приведенном вами примере cat test1 gt; test2 lt; test3 файл test3 является входным потоком для cat , но cat игнорирует его , потому что вы не указали - в качестве аргумента. Если вы вместо этого сделаете cat test1 - gt; test2 lt; test3 это , то cat прочтете его stdin, но конечным содержанием test2 будет не просто содержание test3 , а объединение test1 и test3 .

Возможно, вам стоит попробовать провести эксперименты:

 cat test1 - gt; test2 lt; test3 cat gt; test2 lt; test3 cat - test1 - gt; test2 lt; test3 cat - - test1 test1 gt; test2 lt; test3  

Кроме того, возможно, посмотрите на

 lt; test3 cat gt; test2 cat lt; test3 - test1 gt; test2  

Комментарии:

1. Спасибо, примеры действительно помогли мне!