[英]Bash: how to highlight executed commands?
Bash提供了-v
--verbose
選項,該選項會將命令讀取到stderr時將其寫入。
需要突出顯示此輸出。 當前解決方案
bash -v script 2> >(sed $'s,.*,\e[38;5;123m&\e[m,' >&2)
突出顯示stderr中的所有內容。
因此,問題是將-v
輸出與其他stderr分開。
加成。 bash具有BASH_XTRACEFD
,可用於突出顯示-x
(xtrace)輸出。
更新:這種重定向也違反了命令/響應的順序-響應可以出現在命令之前。
因此,當前的解決方案是根本不突出顯示任何內容。
Upd2 .:使用expect
-與交互式程序進行編程對話似乎是個好主意。
編輯:
您所要求的是不可能的:
bash
,則無法將bash的-v
輸出與程序的stderr分離 您可以輕松獲得所需的唯一方法是
我的原始答案(保留在下面)使用一種變通辦法,該變通辦法可以完成您想要的,但要注意的是將所有彩色輸出分組在一個塊中(並且您希望每行執行時都進行彩色化)。
原版的:
由於當前無法告訴bash為-v
的輸出使用另一個描述符,因此您無法將其與腳本的stderr分開。
如果要實現的僅突出顯示-v
的輸出(而不突出顯示stderr),則可以實現的唯一方法是調整腳本以手動分離流:
exec 2>&3
添加為腳本中的第一條指令, { ... ; } 2>&4
{ ... ; } 2>&4
塊 bash -v newscript 3> >(sed $'s,.*,\\e[38;5;123m&\\e[m,' >&2) 4>&2
如果希望包裝器自動執行所有操作,則可以使用以下方法:
bash -v <(printf %s\\n 'exec 2>&3' '{'; cat script; printf %s\\n '' '} 2>&4') 3> >(sed $'s,.*,\e[38;5;123m&\e[m,' >&2) 4>&2
或者,如果您是echo
迷:
bash -v <(echo $'exec 2>&3\n{'; cat script; echo $'\n} 2>&4') 3> >(sed $'s,.*,\e[38;5;123m&\e[m,' >&2) 4>&2
printf
中的''
部分用於處理沒有尾隨換行符的腳本) 3
和4
以外的其他FD,因為您的腳本需要使用它們
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.