linux, перенаправление

Рейтинг: 1Ответов: 2Опубликовано: 11.01.2023

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

ls file1 file2 2>error

Не могу понять, как записать в error пронумерованный текст ошибки.

Буду благодарен за помощь!

Ответы

▲ 2Принят

2> выделяет ошибки, >(...) передаёт их на обработку в другую программу, nl - нумерует строки, > error.txt - сохраняет их:

$ ls script.sh lost.txt deal missing.txt 2> >(nl > error.txt)
script.sh

deal:
deal_10  deal_11

$ cat error.txt 
     1    ls: cannot access 'lost.txt': No such file or directory
     2    ls: cannot access 'missing.txt': No such file or directory

$
▲ 0

есть система команд из 2-3 символов, одна из них nl

предложу такой вариант, где sdx.txt - существующий:

ls sdx.txt file1 file2  2>&1 1> 2.txt   | nl

вывод на консоли:

> ls sdx.txt file1 file2  2>&1 1> 2.txt   | nl
>      1  ls: cannot access 'file1': No such file or directory
>      2  ls: cannot access 'file2': No such file or directory

вывод stdout из файла:

localhost:~ # cat 2.txt
sdx.txt