2011-09-26 43 views
7

我有一堆使用的一些命令和其他工具的shell腳本。如何檢索在shell腳本中使用的所有工具

那麼,有沒有一種方法,我可以列出的shell腳本正在使用的程序? 從源代碼中檢索依賴項的方式。你可以做到這一點

+0

您的問題不清楚,例如「解析工具」沒有意義。你在尋找腳本使用的程序列表嗎?或者使用你的腳本的程序列表? –

+0

已更新的問題。我正在查找使用shell腳本的程序列表。 – deimus

回答

2

用途sed管道和$(轉化爲換行符,然後使用awk輸出第一字線,如果它可能是一個命令。進入which的管道找到路徑中的potiential命令字:

sed 's/|\|\$(/\n/g' FILENAME | 
awk '$1~/^#/ {next} $1~/=/ {next} /^[[:space:]]*$/ {next} {print $1}' | 
sort -u | 
xargs which 2>/dev/null 
2

的一種方法是在運行時。您可以使用-x選項在debug mode中運行bash腳本,然後解析它的輸出。所有執行的命令及其參數將被打印到標準輸出。

+0

bash --rpm-requires以更可讀的方式執行此操作......不知道如何在不運行腳本的情況下執行此操作? – deimus

+0

我不認爲你可以在沒有運行腳本的情況下可靠地做到這一點。 [這裏](http://stackoverflow.com/questions/3926918/determine-function-and-file-dependency-of-a-shell-script/3928062#3928062)我發現的唯一工具可能可以做到這一點。 – ks1322

1

雖然我沒有通用的解決方案,你可以嘗試兩種方法:

  1. 您可以使用strace的,看看哪些項目是由腳本執行。
  2. 你可能會在pbuilder環境中運行您的程序,看看哪個包丟失了。
0

因爲殼的動態特性,你不能沒有運行腳本做到這一點。

例如:

TASK="cc foo.c" 
time $TASK 

這將是真的很難確定,而不運行cc被稱爲即使在這種簡單的例子如上。

在運行時,你可以檢查調試輸出sh -x myscript由thiton(+1)和ks1322(+1)指出。你也可以像strace這樣的工具來捕獲所有的exec()系統調用。