Intereting Posts
ddrescue: Как повторить попытку для 1 плохого блока после того, как все другие данные надежно сохранены? lsblk показывает несуществующие разделы md после перезагрузки Как я могу извлечь китайские символы из текста Невозможно прочитать или распаковать определенные архивы на одном конкретном сервере Установка регулятора процессора на максимум Есть ли способ фильтрации и печати определенного шаблона без повторения кода? Вывод трубного процесса, который уже запущен Как включить пятый последовательный порт на Debian 7 Отправка команды `time` в текстовый файл Содержит ли жесткие ссылки обычные файлы? Что означает «@» перед именем репо в `dnf list`? Как вставить вывод предыдущей команды в текущую командную строку? «Echo» содержимое html для файла в perl Can 'ssh <host> <command>' настраивается всегда на загрузку файлов на стороне сервера? Исключить каталоги в поиске местоположения

Как перенаправить stdout и stderr в разные файлы

При запуске сценариев оболочки мы можем перенаправить вывод сценариев оболочки в два разных файла. ieSTDOUT и STDERR. Если есть журналы ошибок, они должны перейти в файл STDERR, и если сценарий успешно запущен, журналы должны быть сгенерированы в файле STDOUT

Пример сценария оболочки:

#!/bin/bash echo "Good" # and something bad I can't do under ordinary user touch /root/something 

Беги как:

 $ test.sh 1>/tmp/STDOUT 2>/tmp/STDERR 

И контент:

 $ cat /tmp/STDOUT Good $ cat /tmp/STDERR touch: cannot touch '/root/something': Permission denied 

Попробуйте следующее :

 echo "test" 1>STDOUT 2>STDERR 

Заменить echo "test" любой командой или скриптом.

Простой пример :

Создайте script.sh с контентом:

 #!/bin/bash du -shc /* 

Добавить разрешение выполнения:

 chmod u+x script.sh 

И запустите его:

 ./script.sh 1>STDOUT 2>STDERR 

Затем просмотрите каждый файл:

 # cat STDOUT 8,6M /bin 39M /boot 0 /dev 4,1M /etc 1,1G /home 0 /initrd.img 0 /initrd.img.old 231M /lib 4,0K /lib64 # cat STDERR du: cannot access `./proc/7422/task/7422/fd/4': No such file or directory du: cannot access `./proc/7422/task/7422/fdinfo/4': No such file or directory du: cannot access `./proc/7422/fd/4': No such file or directory du: cannot access `./proc/7422/fdinfo/4': No such file or directory 

Чтобы настроить перенаправление внутри скрипта, используйте exec :

 #!/bin/bash exec 1>STDOUT 2>STDERR du -shc /* 

И просто запустите скрипт:

 ./script.sh 

Объяснение :

 1>filename Redirect stdout to file "filename." 1>>filename Redirect and append stdout to file "filename." 2>filename Redirect stderr to file "filename." 2>>filename Redirect and append stderr to file "filename." &>filename Redirect both stdout and stderr to file "filename." This operator is now functional, as of Bash 4, final release. M>N "M" is a file descriptor, which defaults to 1, if not explicitly set. "N" is a filename. File descriptor "M" is redirect to file "N." M>&N "M" is a file descriptor, which defaults to 1, if not set. "N" is another file descriptor. 

Для получения дополнительной информации см. Перенаправление ввода-вывода