请您澄清一下-l
shell命令的exec
选项的用法。当我运行exec ls | cat
和exec -l ls | cat
时,我没有发现任何差异。
答案 0 :(得分:4)
-l
的{{1}}选项会在命令名称的开头添加exec
。例如:
-
请注意exec -l diff | head
-diff: missing operand after '-diff'
-diff: Try '-diff --help' for more information.
之前的-
。{/ p>
这一切的重点是什么?如果在启动shell的命令之前有diff
,它将充当登录shell。来自-
:
登录shell是一个参数为零的第一个字符是 - ,或者是以--login选项开头的一个。
现在,man bash
声明:
如果提供了-l选项,shell会在传递给command的第0个参数的开头放置一个破折号。这是 登录(1)的作用。
因此man exec
将exec -l bash
作为登录shell运行。为了测试这一点,我们可以使用登录bash执行文件bash
的事实,所以:
~/.bash_profile
如果我开始登录bash,将执行命令$ cat ~/.bash_profile
#!/bin/sh
printf "I am a login shell!\n"
。现在用printf "I am a login shell!\n"
进行测试:
exec
没有显示任何内容,我们在非登录shell上。
$ exec bash
$
这里我们有一个登录shell。