exec $SHELL -l 有什么作用?

And*_*rew 10 shell-script

我在几个不同的 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 的命令行中键入一样。


jkt*_*vis 8

它正在调用您的 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 部分以获取更多信息。

TL; 博士;

最重要的是,它告诉 Bash 在调用时要获取哪些文件。无论是$HOME/.bash_profile( -l) 还是$HOME/.bashrc( -i)。

参考