“bash -”中的“-”是什么意思?

“bash -”中的“-”是什么意思?

以下 bash shell 代码中的是什么bash -意思?它似乎用于将输出的最后一个代码作为输入。如果是这样,我可以将其写为bash或 吗xargs bash

curl --silent --location https://rpm.nodesource.com/setup | bash -

答案1

如有疑问,请阅读源代码。=)

Bash 4.3,shell.c第 830 行,函数中parse_shell_options()

  /* A single `-' signals the end of options.  From the 4.3 BSD sh.
     An option `--' means the same thing; this is the standard
     getopt(3) meaning. */
  if (arg_string[0] == '-' &&
       (arg_string[1] == '\0' ||
         (arg_string[1] == '-' && arg_string[2] == '\0')))
    return (next_arg);

换句话说-没有更多选择。如果命令行上还有其他单词,它们将被视为文件名,即使该单词以-. 开头。

当然,在你的例子中,这-完全是多余的,因为它后面没有任何内容。换句话说,bash -完全等同于bash


Bash 接受命令

  1. 如果在命令行中提供了脚本文件,或者
  2. 如果其 stdin 不是 TTY,则以非交互方式从其 stdin 执行(例如在您的示例中:stdin 是一个管道,因此 Bash 将以脚本形式执行该 URL 的内容),或者
  3. 如果其 stdin 是 TTY,则以交互方式进行。

bash -告诉 Bash 从其标准输入读取命令是一种误解。确实,在您的示例中,Bash 将从 stdin 读取其命令,无论命令行上是否有-,它都会这样做,因为如上所述,bash -与相同bash

为了进一步说明这-并不意味着标准输入,请考虑:

  • cat命令旨在将 a 解释-为 stdin。例如:

    $ echo xxx | cat /etc/hosts - /etc/shells
    127.0.0.1 localhost
    xxx
    # /etc/shells: valid login shells
    /bin/sh
    /bin/dash
    /bin/bash
    /bin/rbash
    /bin/zsh
    /usr/bin/zsh
    /usr/bin/screen
    /bin/tcsh
    /usr/bin/tcsh
    /usr/bin/tmux
    /bin/ksh93
    
  • 相反,您无法通过以下尝试让 Bash/bin/date执行/bin/hostname

    $ echo date | bash - hostname
    /bin/hostname: /bin/hostname: cannot execute binary file
    

    相反,它尝试将其解释/bin/hostname为一个 shell 脚本文件,但由于它是一堆二进制乱码,因此会失败。

  • 您无法date +%s使用bash -其中任何一种来执行。

    $ date +%s
    1448696965
    $ echo date | bash -
    Sat Nov 28 07:49:31 UTC 2015
    $ echo date | bash - +%s
    bash: +%s: No such file or directory
    

你能改写xargs bash吗?不行。 curl | xargs bash会使用脚本内容作为命令行参数来调用 bash。内容的第一个字将是第一个参数,并且很可能会被误解为脚本文件名。

答案2

该命令的目的是将 curl 命令的输出通过管道传输到 bash,以便它立即执行 curl 返回的命令。基本上,它告诉 bash 从 stdin 获取输入。请参阅https://superuser.com/a/1494190/234355

但是,在同一个答案中,有一些关于这是否真的有效的讨论。如果您只执行问题中命令的第一部分curl --silent --location https://rpm.nodesource.com/setup,它将输出一个有效的 bash 脚本。我没有尝试,因为不想执行来自互联网的一些未知脚本。

相关内容