我在几个不同的 shell 脚本中看到过这个命令:
exec $SHELL -l
Run Code Online (Sandbox Code Playgroud)
...通常作为替代:
source ~/.profile
Run Code Online (Sandbox Code Playgroud)
究竟在exec $SHELL -l
做什么?
Mik*_*ehn 10
exec 命令将当前进程映像——可执行文件或程序——替换为一个新的进程映像,命名为 exec 的参数。如果 $SHELL 包含可执行文件的名称,就像通常那样,exec 将旋转该 exe 以代替正在运行的 shell。
但是,这与仅使用“源”读取命令文件是非常不同的操作。source 命令读取命名文件并逐行执行内容,就像在当前 shell 的命令行中键入一样。
它正在调用您的 shell ( $SHELL
) 作为登录 shell。
摘自 Bash 手册页
-l Make bash act as if it had been invoked as a login shell
(see INVOCATION below).
Run Code Online (Sandbox Code Playgroud)
我建议阅读手册页的 INVOCATION 部分以获取更多信息。
最重要的是,它告诉 Bash 在调用时要获取哪些文件。无论是$HOME/.bash_profile
( -l
) 还是$HOME/.bashrc
( -i
)。