
我正在編寫一個 bash 函數,它將運行一些命令來設定環境,然後讓使用者處於提示符下。
我可以跑
bash -c 'ls'
ls
在 bash 中執行。
我也可以做
bash -c 'ls ; exec bash'
執行ls
,然後讓 bash 提示字元保持開啟。
但是,我想取得一個檔案並設定一些別名、函數和環境變量,然後讓提示保持開啟狀態,如下所示:
bash -c 'source env.sh ; exec bash'
當然,這是行不通的,因為子 shell 不會繼承別名或函數。有辦法解決這個問題嗎?我希望仍然能夠獲取用戶的.bashrc
來源,而不是使用該--init-file
選項。
答案1
設定一個 init 文件,該文件將在開始時獲取使用者的 init 文件,然後執行您想要的任何其他操作:
$ cat env.sh
. ~/.bashrc
export SOMEVAR="value"
somespecialfunction() {
printf '%s\n' "I'm so cool"
}
$ bash --init-file env.sh