2011-05-10 55 views
2

我喜歡使用-x開關使用bash調試腳本。唯一的缺點是,echo命令也顯示其可以創建很多不必要的重複的:bash中:表示執行的命令預期回聲

#!/bin/bash 
echo "Changing to /etc directory" 
cd /etc 

然後,一旦運行:

$ bash -x test.sh 
+ echo 'Changing to /etc directory' 
Changing to /etc directory 
+ cd /etc 

我試圖與bash -x test.sh | grep -v '+ echo'濾除但它不工作。

[問]有沒有辦法阻止-x也顯示echo命令?

感謝

+0

的問題是,-x是寫入標準錯誤,你是唯一管道標準輸出。只要將你的grep改爲: bash -x test.sh 2>&1 | grep的-v「+回聲」 – frankc 2011-05-10 18:59:26

回答

3

您可以通過您所選擇的正則表達式引擎將其過濾:

$ ./test.sh 2>&1 | awk '{if(!match($0, /^\+ echo/)){print $0}}' 

$ ./test.sh 2>&1 | grep -v '^\+ echo' 
+0

如果你要過濾你的輸出,是不是很簡單,只需使用'grep的-v「^ + echo''?這對'awk'很笨拙。 – Caleb 2011-05-10 15:02:08

+0

經過測試但不起作用。一些有趣的事情,我注意到的是,我甚至不能用grep出用'grep的-v'輸出,當我使用'慶典-x'而與-v'作品'回聲「東西」的grep做。 – Max 2011-05-10 15:05:27

+0

@Caleb是的,這是一個更好的主意。我忘了該選項:) @ user359650的bash -x被寫入標準錯誤。你需要將stderr pipe到標準輸出並grep。我用一個例子更新了我的答案。確實是 – sapht 2011-05-10 15:09:16