exec $SHELL -l 做什么?

exec $SHELL -l 做什么?

我在几个不同的 shell 脚本中看到过这个命令:

exec $SHELL -l

...通常作为以下方法的替代:

source ~/.profile

到底在exec $SHELL -l做什么?

答案1

exec 命令将当前进程映像(可执行文件或程序)替换为新的进程映像(命名为 exec 的参数)。如果 $SHELL 包含可执行文件的名称(通常如此),exec 将启动该 exe 来代替正在运行的 shell。

然而,这与仅仅使用“源”读取命令文件是一个非常不同的操作。 source 命令读取指定文件并逐行执行内容,就像在当前 shell 的命令行中键入一样。

答案2

它调用您的 shell ( $SHELL) 作为登录 shell。

摘自 Bash 手册页

-l       Make bash act as if it had been invoked as a login shell 
         (see INVOCATION below).

我建议阅读手册页的 INVOCATION 部分以获取更多信息。

TL;博士;

底线是它告诉 Bash 在调用时要获取哪些文件。要么$HOME/.bash_profile( -l) 要么$HOME/.bashrc( -i)。

参考

相关内容