Linux
在 shell 腳本中執行使用者預設 shell
在 shell 腳本中,我想執行使用者 shell 並在 shell 完成後繼續執行腳本。
它應該看起來像這樣:
> myScript.sh Script ouput > echo "shell started by myScript.sh" shell started by myScript.sh > exit More script output >
它在我在腳本中執行 shell 時起作用:
echo "Script output" bash echo "More script output"
但我希望它不要使用固定的外殼。使用者登錄 shell 或他在啟動 myScript.sh 之前所在的 shell 應該沒問題。
任何解決方案都必須不僅適用於基於 Linux 的系統,而且適用於 Mac OSX
初始登錄 shell 保存在 passwd 數據庫中,因此您可以按照
$(getent passwd myusername | cut -d: -f7)
. 請注意,如果我通常使用zsh
,但目前在 a 中bash
並執行它,我將得到 azsh
而不是 abash
,這可能是也可能不是你想要的?
環境變數
$$
是指目前的PID。我們可以將它與 ‘ps’ 一起使用來查找目前 shell:
ps --no-header -o args -p $$ | cut -d- -f2
上面應該返回你想要的,修剪可能存在的前導。例如:
THESHELL=`ps --no-header -o args -p "$$" | cut -d- -f2` start_another_shell() { "$THESHELL" } echo "The shell is $THESHELL" start_another_shell echo "Bye!"
確保使用“源”執行它,以避免意外地對自己進行 forkbombing。例如:
me@here$ source myScript The shell is bash me@here$ exit Bye! $ zsh $ source myScript The shell is zsh $ exit Bye!