【发布时间】:2016-10-11 08:12:31
【问题描述】:
能否请您澄清-l shell 命令的-l 选项的使用。当我运行exec ls | cat 和exec -l ls | cat 时,我没有注意到任何区别。
【问题讨论】:
-
谢谢!。通过那个指南。如果可以的话,请你通过一个例子来解释一下。
能否请您澄清-l 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 的命令之前有 -,它将充当登录 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!
$
这里我们有一个登录外壳。
【讨论】: