/
hubbitus
/
shell.scripts
Обзор
Документация
Войти
/
hubbitus
/
shell.scripts
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
logged.run
36 строк
1 KB
Hubbitus
1 letter typo fix
25 дек 2016, 18:47
25 дек 2016, 18:47
d98c210
Код
Авторство
О чём код?
#!/bin/bash # Script to write separately STDERR in one file and also mixed STDOUT+STDERR into another. # Common use case: check what there no errors happened, but if they present - also look it in historical context of run flow. # # Example: # executable file test.sh with content: # #!/bin/bash # echo 'This line on STDOUT' # echo 'This line on STDERR' 1>&2 # # Call like: # $ CMD='./test.sh' ./run.logged # You got (filenames change able via LOG_ERR, LOG_ALL, by default based on command runned): # 1) Console output of both lines. # 2) test.sh.LOG.err file wit single line: 'This line on STDERR' # 3) test.sh.LOG.all file with both lines # # Also call variant from other scripts by sourcing: cat test.sh # #!/bin/bash # function somerun(){ # echo 'This line on STDOUT' # echo 'This line on STDERR' 1>&2 # } # CMD=somerun . ./run.logged # Note . (source) if you want use function name, not just string of global command : ${CMD?"CMD env variable should point on real command STDIN/STDOUT of will be written separately. LOG_ERR and LOG_ALL may be provided optionaly"} #http://wooledge.org:8000/BashFAQ?action=show&redirect=BashFaq#head-3ea5ee0ab12df2fd6f37f29b32c061436943232d # Redirect stderr to a pipe, keeping stdout unaffected. ( exec 3>&1 # Save current "value" of stdout. $CMD "$@" 2>&1 >&3 | tee "${LOG_ERR:-$CMD.LOG.err}" # Send stdout to FD 3. exec 3>&- # Now close it for the remainder of the script. ) | tee "${LOG_ALL:-$CMD.LOG.all}"