Path

如何在 heredocument 中使用一個路徑

  • February 3, 2018

我寫了這個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 的範例中(將在bashkshshell 中工作),我生成要在循環中執行的腳本的名稱。在嘗試執行它之前,我還測試是否實際上有一個具有該名稱的執行檔(使用 th-x測試)。

引用自:https://unix.stackexchange.com/questions/421583