我试图过滤执行bash -x命令时产生的特定输出。这是我的代码:
touch ./log/time_$now_time.txt
touch ./log/session_$now_time.log
case $multinode in
true)whiptail --title "Multinode system" --msgbox "Multinode system found! Redirecting to the Multinode Menu... " 10 60
cd multinode
script -q -t 2> ../log/time_$now_time.txt -c "bash -x ./menu.sh" -f ../log/session_$now_time.log ;;
false)whiptail --title "Singlenode system" --msgbox "Singlenode system found!Redirecting to the Singlenode Menu..." 10 60
cd singlenode
script -q -t 2> ../log/time_$now_time.txt -c "bash -x ./menu.sh" -f ../log/session_$now_time.log;;
*)
echo "Invalid option. Quitting"
break ;;
esac
有没有办法记录bash -x生成的所有+++输出,但不能显示它? 如果我将所有输出重定向到/ dev / null我也会丢失whiptail视图,但是我不想丢失bash -x输出,但只是不显示。
以下是我开始编写脚本时的内容:
+++ date +%d_%m_%Y
++ now=11_09_2017
+ true
++ whiptail --title 'Multinode Main Menu' --menu '\n\n\n\n\n\n\n\n'...
+ case $OPTION in
+ echo 'Bye !'
Bye !
#
如何隐藏所有+++行,但是将它们记录在会话日志文件中?
答案 0 :(得分:0)
特殊变量BASH_XTRACEFD
允许使用另一个文件描述符而不是2。
[参考文献] [1]
https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html
exec 5> commands.txt
BASH_XTRACEFD=5
set -x
或整合提供的脚本
... "BASH_XTRACEFD=5 bash -x ./menu.sh 5> commands.log" ...
此外,错误输出(2>
)会在script
-f
选项提供的同一文件中重定向,是否需要?
将menu.sh的错误和命令放在单独的文件中而不是gnu script
消息
... "bash -x ./menu.sh 2> err_and_commands.log" ...