请帮忙解释一下exec
shell命令的-l
选项用法。我运行exec ls | cat
和exec -l ls | cat
并没有发现任何区别。
exec
的 -l
选项会在您的命令名称前面添加一个 -
。例如:exec -l diff | head
-diff: missing operand after '-diff'
-diff: Try '-diff --help' for more information.
diff
之前的-
。-
,它将充当登录shell。根据man bash
:man exec
指出:exec -l bash
将作为登录shell运行bash
。为了测试这一点,我们可以利用登录bash执行文件~/.bash_profile
的事实:$ cat ~/.bash_profile
#!/bin/sh
printf "I am a login shell!\n"
如果我启动一个登录bash,命令printf "I am a login shell!\n"
将被执行。现在使用exec
进行测试:
$ exec bash
$
没有显示任何内容,我们处于非登录shell状态。
$ exec -l bash
I am a login shell!
$