Задача на каналы, stderr, stdin, stdout в Linux. Как работают потоки ввода-вывода в Linux?
l s f i l e 1 f i l e 2
Файл file1 существует, файл file2 не существует. Перенаправьте только стандартную ошибку в канал, одновременно записывая номера строк, и перенаправьте вывод
в файл.
В общей сложности несколько часов бился над данной задачей.
Методом перестановки всех возможных операторов перенаправления потоков получил такое решение, но оно неверное:
ls file1 file2 2>&1 1>output.txt | nlr
Самым логичным было бы написать так, но такой вариант не нумерует строки:
ls file1 file2 > output.txt | nl
есть несколько вопросов:
1. Почему последний вариант, кажущийся самым правильным строки не нумерует
2. Операторы перенаправления потоков выполняются справа налево или слева направо?
3. Операторы перенаправления выполняются последовательно (то есть ожидают выполнения предыдущих), ил
и выполняются параллельно?
4. Как решить эту задачу? Возможно что-то не так концептуально?
Кратко. С азов учи, а не вырывая из контекста. Всё не так. Сохрани, когда изучишь, посмеёшься, как глупо рассуждаешь. Книг полно. abs-book, Дэвид Тейнсли - "Linux и UNIX программирование в shell. Руководство разработчика" и многие другие. https://yamadharma.github.io/ru/course/os-intro/le... За неделю осилишь вопрос решить и углублённо изучишь.
1. Потому что он неправильный, в nl не попадает ничего, вы еще и поток ошибок забыли. Писать в файл вам надо после nl
2. ЧатГПТ говорит, что слева направо, но вроде это не совсем так, я не уверен.
3.
4. Пункт 5.12 правил