перенаправление переменной сценария в файл журнала без потери stderr

Можно выполнить загрузчик непосредственно и передать его команда, которую Вы хотите выполнить:

/lib/ld-linux.so /bin/chmod +x /bin/chmod

Ваш путь к загрузчику мог бы варьироваться. В 64-разрядной системе необходимо выбрать правильную на основе как chmod был скомпилирован; 64-разрядную версию называют чем-то как /lib64/ld-linux-x86-64.so.2

4
15.10.2015, 12:06
3 ответа
user1@mac1:~/tmp$ cat t1.sh
exec 4>shell.log
BASH_XTRACEFD=4

set -x
echo abc
cat ffff

user1@mac1:~/tmp$ bash t1.sh
abc
cat: ffff: No such file or directory
user1@mac1:~/tmp$ cat shell.log
+ echo abc
+ cat ffff
user1@mac1:~/tmp$ 
5
27.01.2020, 20:53

Вывод set -x направляется на stderr . Что вам нужно сделать, так это перенаправить stderr , например:

sh -x your_script.sh 2> debug_info.txt

Если вы хотите отличить вывод stderr из-за set -x от обычного stderr , вы можете использовать тот факт, что вывод set -x имеет префикс $ PS4 , который по умолчанию равен + .

bash -x your_script.bash 2> \
\
    >(tee >/dev/null \
           >(grep    '^\+ ' > set_x_output.txt)\
           >(grep -v '^\+ ' > rest_of_sdterr.txt)\
      )          

Если часть вашего обычного вывода stderr начинается с + , вы можете изменить префикс по умолчанию, изменив PS4 .

0
27.01.2020, 20:53

Мне удалось исправить перенаправление с помощью этой команды:

  • это также позволяет мне контролировать, что именно я ' м без учета.
  • это только для версии bash старше 4.1, где BASH_XTRACEFD недействителен.

exec 2>> (tee -a $ LOG_FULL_NAME 2> & 1 | grep -v "^ + \ | ^ ++") 1> & 2

0
27.01.2020, 20:53

Теги

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