Или это, gnu sed
:
sed -n -e '1~4 {N; p;}' file
-n
подавляет вывод. Если в строке 1 + 4 * k
(k = итератор) текущая строка и следующая строка считываются в пространство шаблонов
и p
печатает (текущую) пространство шаблонов (т.е. временное включение вывода)
«> » действует как «1 **> **»
так и должно работать
./errorandoutput.sh 2>file 1>&2
$ ( echo yay ; fhgfhgf ) > out 2>&1
$ cat out
yay
bash: fhgfhgf: command not found
$ ( echo yay ; fhgfhgf ) 2> out 1>&2
$ cat out
yay
bash: fhgfhgf: command not found
Порядок перенаправления работает иначе.
Порядок перенаправления определяет только порядок действий оболочки с описанием файла, а не с его содержимым.
В:
./errorandoutput.sh >file 2>&1
Сначала оболочка перенаправляет стандартный вывод на file
, затем перенаправляет стандартную ошибку на стандартный вывод, который теперь указывает на file
, так что и стандартный вывод, и стандартная ошибка теперь переходят к file
.
На этом этапе выполняется оболочка с перенаправлением. К содержимому файла file
это не имеет никакого отношения.
Порядок содержимого в file
определяется порядком выполнения команд внутри скрипта. Измените свой скрипт на:
#!/bin/bash
ls dflj
echo myecho
и вы бы получили то, что хотели.
Если это важно, отправьте стандартный вывод в файл, а затем выведите его. Конечно, для этого потребуется сценарий :
.temp=/tmp/yc$$
yourcommand > ${temp}
cat ${temp} && rm -f ${temp}