【问题标题】:What does bash -s do?bash -s 有什么作用?
【发布时间】:2016-09-10 12:20:41
【问题描述】:

我是 bash 新手,想了解下面的脚本在做什么,我知道 -e 是退出,但我不确定 -se$delimiter 的用途是什么?

$delimiter = 'EOF-MY-APP';

$process = new SSH(
    "ssh $target 'bash -se' << \\$delimiter".PHP_EOL
        .'set -e'.PHP_EOL
        .$command.PHP_EOL
        .$delimiter
);

【问题讨论】:

  • -s 从标准输入读取命令。 linux.die.net/man/1/bash(来源:十秒谷歌搜索)
  • ^^ 那么,-s 是多余的吗?谁能提供一个例子,在哪里需要-s
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。
  • @RyanBemrose 现在是 2020 年,谷歌搜索“bash -s”时的第一个结果就是这个页面 :-)

标签: bash ubuntu terminal


【解决方案1】:

-s 选项通常与curl $script_url | bash 模式一起使用。例如,

curl -L https://chef.io/chef/install.sh | sudo bash -s -- -P chefdk

-s 使 bash 从标准输入读取命令(“curl”下载的“install.sh”代码),但仍接受位置参数。

-- 让 bash 将后面的所有内容视为位置参数而不是选项。

bash 会将“install.sh”代码的变量$1$2 分别设置为-Pchefdk

参考:https://www.experts-exchange.com/questions/28671064/what-is-the-role-of-bash-s.html

【讨论】:

    【解决方案2】:

    来自man bash

    -s   If  the -s option is present, or if no arguments remain after
         option processing, then commands are read from the standard
         input.  This option allows the positional parameters to be
         set when invoking an interactive shell.
    

    来自help set

     -e  Exit immediately if a command exits with a non-zero status.
    

    因此,这告诉 bash 从标准输入读取要执行的脚本,并在脚本中的任何命令(来自标准输入)失败时立即退出。

    分隔符用于标记脚本的开始和结束。这称为Here Document 或heredoc。

    【讨论】:

    • 引用的部分看起来不完整:(
    • 在这种情况下,-s 选项是多余的,因为脚本没有参数。
    • @sjsam 这来自于在我的 Mac 上运行 man/help 命令。
    猜你喜欢
    • 2011-09-20
    • 1970-01-01
    • 2013-08-05
    • 2013-01-06
    • 1970-01-01
    • 2019-07-05
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多