@python_hackersha

Задача на каналы, stderr, stdin, stdout в Linux. Как работают потоки ввода-вывода в Linux?

ls file1 file2
Файл file1 существует, file2 не существует. Перенаправьте только стандартную ошибку в канал, одновременно записывая номера строк, и перенаправьте вывод в файл.


В общей сложности несколько часов бился над данной задачей.
Методом перестановки всех возможных операторов перенаправления потоков получил такое решение, но оно неверное:
ls file1 file2 2>&1 1>output.txt | nlr

Самым логичным было бы написать так, но такой вариант не нумерует строки:
ls file1 file2 > output.txt | nl

есть несколько вопросов:
1. Почему последний вариант, кажущийся самым правильным строки не нумерует
2. Операторы перенаправления потоков выполняются справа налево или слева направо?
3. Операторы перенаправления выполняются последовательно (то есть ожидают выполнения предыдущих), или выполняются параллельно?
4. Как решить эту задачу? Возможно что-то не так концептуально?
  • Вопрос задан
  • 358 просмотров
Пригласить эксперта
Ответы на вопрос 2
@fbi_suck
Эникей
1. Потому что он неправильный, в nl не попадает ничего, вы еще и поток ошибок забыли. Писать в файл вам надо после nl
2. ЧатГПТ говорит, что слева направо, но вроде это не совсем так, я не уверен.
3.
4. Пункт 5.12 правил
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
ls file1 file2 2>&1 | nl >output.txt
А все ответы найдёте в документациях.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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