执行shell命令的-l选项

5

请帮忙解释一下exec shell命令的-l选项用法。我运行exec ls | catexec -l ls | cat并没有发现任何区别。


http://ss64.com/bash/exec.html - Julien Lopez
谢谢!看了那个指南。如果可能的话,你能通过一个例子来解释一下吗? - Rane
1个回答

9
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选项,则shell将在传递给命令的第零个参数的开头放置短划线。这就是login(1)所做的。”
因此,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!
$

这里有一个登录壳。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接