【问题标题】:Option -l of exec shell commandexec shell 命令的选项 -l
【发布时间】:2016-10-11 08:12:31
【问题描述】:

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

【问题讨论】:

  • 谢谢!。通过那个指南。如果可以的话,请你通过一个例子来解释一下。

标签: linux shell command


【解决方案1】:

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!
$

这里我们有一个登录外壳。

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 2021-09-14
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多