Path
如何在 heredocument 中使用一個路徑
我寫了這個here-document來獲取路徑下的一些腳本,
~/own_scripts/
但我寫它的方式導致了這個路徑的重複:source <<-EOF ~/own_scripts/1.sh ~/own_scripts/2.sh # More scripts under ~/own_scripts; EOF
使用路徑設置並稍後取消設置變數很好,但仍會導致冗餘。
source
在此類(或bash
)此處文件中避免路徑冗餘的最佳方法是什麼?
這裡的文件只是一個文件。here-document 中的腳本只是一個腳本。
你的腳本可以寫
cd "$HOME/own_scripts" || exit 1 ./1.sh ./2.sh
或者,如果您要呼叫的所有腳本的呼叫
n.sh
範圍n
為 1 到 30:cd "$HOME/own_scripts" || exit 1 for (( i = 1; i <= 30; ++i )); do [ -x "${i}.sh" ] && ./${i}.sh done
那是,
source <<-'END_SCRIPT' cd "$HOME/own_scripts" || exit 1 for (( i = 1; i <= 30; ++i )); do [ -x "${i}.sh" ] && ./${i}.sh done END_SCRIPT
事實上,由於 here-document 現在很短,您可以
cd
再次刪除:source <<-'END_SCRIPT' for (( i = 1; i <= 30; ++i )); do [ -x "$HOME/own_scripts/${i}.sh" ] && "$HOME/own_scripts/${i}.sh" done END_SCRIPT
只是,
source
不從標準輸入中讀取……所以採購here-document將無法開始。相反,使用類似的東西
bash <<-'END_SCRIPT' ...as above... END_SCRIPT
(如果
bash
是您要執行腳本的外殼)。
- 我曾經
'END_SCRIPT'
啟動過這裡的文件。引用會阻止目前 shell 擴展文件中的變數,並且更詳細的標籤用作讀者的文件。- 我使用了波浪號,
$HOME
而不是~
因為波浪號的行為不像一個變數,並且越詳細$HOME
越好作為腳本中的文件。- here-document 中的腳本僅用於
cd
將目錄更改為$HOME/onw_script
目錄。如果失敗,shell 會話將終止。- 在帶有
for
-loop 的範例中(將在bash
和ksh
shell 中工作),我生成要在循環中執行的腳本的名稱。在嘗試執行它之前,我還測試是否實際上有一個具有該名稱的執行檔(使用 th-x
測試)。