Shell-Script

如何讓 ~/.bashrc 使用循環執行 ~/Shell 目錄中的所有腳本?

  • October 31, 2015

我的~/Shell目錄中有 shell 腳本,當 Bash 以我的常用使用者帳戶啟動時,我想執行這些腳本。所以我所做的是將以下內容添加到~/.bashrc

for i in `find ~/Shell/ -name "*.sh"`
do
   sh $i
done

.sh但是,無論出於何種原因,我的目錄中具有文件副檔名的文件中包含的函式~/Shell都不會自動載入。例如,我abash在我的~/Shell/bash.sh文件中呼叫了一個函式,並abash從一個新的使用者終端執行時給出了一個錯誤,指出找不到該命令。

我知道我可以手動列出我~/Shell目錄中的所有文件,並在它們前面加上一個點,以便在 Bash 啟動時執行它們。例如,我曾經在我的~/.bashrc文件中有這個:

. ~/Shell/bash.sh
. ~/Shell/cd.sh
. ~/Shell/emerge.sh
...

它工作得很好,但我寧願一個for循環來做到這一點,因為這意味著如果我向其中添加任何新的 shell 腳本,~/Shell我不必擔心將它們添加到~/.bashrc.

我現在也嘗試過:

for i in `find -name "~/Shell/*.sh"`
do
       sh $i
done

和:

for i in "~/Shell/*.sh"
do
       sh $i
done

和:

for i in `find -name '~/Shell/*.sh'`
do
       sh $i
done

沒有成功。

把它放在你的.bashrc

for rc in ~/Shell/*.sh
do
   . "$rc"
done

你要去參加比賽了!

幾點注意事項:

( bashand zshetc)source命令雖然可讀,但不是通用的,也不存在於dash我所知道的最正確的 shell 中。就目前而言,同樣的程式碼可用於將程式碼載入到幾乎任何 bourne-shell 衍生產品中。

直接從 shell 獲取的文件的傳統命名約定是使用rcor的後綴.rc(如.bashrc)。 rc代表“執行命令”。該.sh副檔名通常用於可執行腳本程序。(這些只是約定——不是規則。)

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