Shell-Script
如何讓 ~/.bashrc 使用循環執行 ~/Shell 目錄中的所有腳本?
我的
~/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
你要去參加比賽了!
幾點注意事項:
(
bash
andzsh
etc)source
命令雖然可讀,但不是通用的,也不存在於dash
我所知道的最正確的 shell 中。就目前而言,同樣的程式碼可用於將程式碼載入到幾乎任何 bourne-shell 衍生產品中。直接從 shell 獲取的文件的傳統命名約定是使用
rc
or的後綴.rc
(如.bashrc
)。rc
代表“執行命令”。該.sh
副檔名通常用於可執行腳本程序。(這些只是約定——不是規則。)