#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. Спасибо, примеры действительно помогли мне!