2016-10-11 49 views
1

请您澄清一下使用-l选项exec shell命令。当我运行exec ls | catexec -l ls | cat时,我没有注意到任何区别。exec shell命令的-l选项

+0

http://ss64.com/bash/exec.html –

+0

谢谢!通过该指南。如果可能的话,你能否通过一个例子来解释它。 – Rane

回答

2

exec-l选项在命令名称的开头添加了一个-。例如:

exec -l diff | head 

-diff: missing operand after '-diff' 
-diff: Try '-diff --help' for more information. 

diff-无处不在。

这一切的关键?如果在命令启动shell之前有一个-,它将充当登录shell。从man bash

登录shell是其参数为零的第一个字符为 - 或一个以--login选项开头的shell。

现在,man exec指出:

如果-l选项提供,外壳放置一个破折号,在传递到指挥零参数的开始。这是 什么登录(1)。

因此exec -l bash将运行bash作为登录shell。为了验证这一点,我们可以用这样一个事实:登录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! 
$ 

这里我们有一个登录shell。

+0

谢谢你Julien Lopez。 – Rane

+0

@Rane不客气。如果回答您的问题,请将我的答案标记为已接受。 –

+0

已接受并向上投票。 – Rane