bash: перенаправить stderr в файл и stdout + stderr на экран

Ок, вот ответ от pierre schmitz, thx nymous за ссылку:

openssl, phar и posix модули теперь встроены в ядро php7. Удалите соответствующие директивы из вашего php.ini, например ;extension=openssl.so.

php-xcache несовместим с php7, удалите пакет, проект, похоже, умер.

полный список состояния пакетов сторонних разработчиков:

| Package          | Status       | Solution                                                     |
|------------------|--------------|--------------------------------------------------------------|
| graphviz         | incompatible | remove PHP bindings                                          |
| php-apcu         | compatible   | update to version 5                                          |
| php-geoip        | incompatible | remove package                                               |
| php-memcache     | incompatible | remove package, project seems dead                           |
| php-memcached    | incompatible | remove package, move back when upstream version is available |
| php-mongo        | incompatible | remove package, superseded by the mongodb driver             |
| php-xcache       | incompatible | remove package, project seems dead                           |
| uwsgi-plugin-php | incompatible | remove PHP support, upstream update seems possible           |
| xdebug           | compatible   | update to latest release candidate of version 2.4            |

6
23.05.2017, 14:33
2 ответа

В недавней версии bash вы можете использовать замену процесса.

foo 2> >(tee stderr.txt)

Это просто отправляет stderr программе, выполняющей tee.

Более переносимый

exec 3>&1 
foo 2>&1 >&3 | tee stderr.txt

Это делает файловый дескриптор 3 копией текущего стандартного вывода (т. Е. Экрана), затем настраивает конвейер и запускает foo 2> & 1> & 3 . Это отправляет stderr из foo в то же место, что и текущий stdout, который является каналом, затем отправляет stdout на fd 3, исходный вывод. Канал передает исходный stderr из foo в tee, который сохраняет его в файл и отправляет на экран.

12
27.01.2020, 20:27

лучший ответ, который я смог найти:здесь

(cmd 2> >(tee /dev/stderr)) > log

он направляет оба(stdout и stderr)на экран(и в файл)и позволит вам зафиксировать ошибку, если она используется во встроенном условии (, если)или последовательных встроенных командах.

бывший:

$((curl "https://unix.stackexchange.com"  2> >(tee /dev/stderr)) >> logfile) && echo "some other commands if curl succeeds without error"

в других методах, например, для соединения трубопровода с тройником(| тройник... ), следующая команда(echo ... )выполняется независимо от того,(curl )успешно или неудачно , потому что он считает(tee)последней выполненной командой, а не(curl)

0
27.01.2020, 20:27

Теги

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