我在几个不同的 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
)。