2013-03-14 75 views
1

我需要檢查一個bash腳本的運行採購時,與源呼叫保持冗長,是這樣的:如何從一個bash腳本

#!/bin/bash 
some code here 
source script_b.sh 
more code here 

我運行:

$bash -x script_a.sh 

和我得到,

+ some echo here 
+ script_b.sh 
+ some more echo here 

但所有的回聲都來自script_a.sh。所有script_b.sh中的代碼都是隱藏的,所以我無法追蹤真正發生的事情。

有沒有什麼辦法可以檢查腳本script.a.sh內script_b.sh的執行?

+1

它的工作原理就像你想要的。我使用bash 3.2.48。 – Barmar 2013-03-14 16:43:36

+0

@Barmar謝謝,我的版本更高。我試圖用一個簡單的腳本重現問題,並且確實有效。奇怪。我會按照從下面的提示。 – 2013-03-14 17:56:27

+0

我剛剛在bash 4.1.5中嘗試過它,它也起作用。 – Barmar 2013-03-14 18:13:48

回答

1

您可以在父腳本內嘗試「bash -x script_b.sh」。

編輯:

這對我有效。如果你用bash -x運行父腳本,你會看到兩者的一切。 「set -x」將在腳本中爲環境設置調試標誌?我不確定,前鋒對我來說仍然很神奇。

echo "start of script" 
set -x 
mkfifo fifo 
cat /dev/null < fifo | fifo > source .bash_profile 
rm fifo 
echo "end of script" 
+0

這將在子shell中運行腳本。通常你需要一個腳本來源,因爲你需要它來改變原來的shell環境。 – Barmar 2013-03-14 18:12:24

+0

沒錯,但是對於調試來說,看看發生了什麼可能是一種拙劣的方式。怎麼樣使用「strace ./script_a.sh」? – 2013-03-14 18:56:42