在自制安装脚本中绕过提示(按回车)

cak*_*s88 22 bash homebrew

安装自制软件的非常简单的脚本:

  #!/bin/bash

  ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
Run Code Online (Sandbox Code Playgroud)

输出给出:

==> This script will install:
/usr/local/bin/brew
/usr/local/Library/...
/usr/local/share/man/man1/brew.1

Press RETURN to continue or any other key to abort
Run Code Online (Sandbox Code Playgroud)

如何在这样的脚本中按Enter键?期望是最好的路线?

Cha*_*ffy 25

阅读https://raw.github.com/Homebrew/homebrew/go/install的来源- 它只会提示stdin是否为TTY.如果你重定向stdin /dev/null,它根本不会提示.所以:

ruby \
  -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" \
  </dev/null
Run Code Online (Sandbox Code Playgroud)

  • 我可以在安装命令中添加用户密码以避免用户交互吗? (2认同)

l0b*_*0b0 19

yes是为了什么:

yes '' | ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
Run Code Online (Sandbox Code Playgroud)

  • @datasmid这两者之间有*差异,我的解决方案在不依赖于未记录的功能的情况下工作 - "它只会提示stdin是否为TTY". (3认同)
  • @ l0b0,当然,但是如果它没有记录它将从stdin读取而不是从TTY读取,那么我们没有(记录在案的,正在进行的)保证这将无论如何都能正常工作.整个过程都依赖于无证行为. (2认同)
  • @datasmid`yes`是并且始终记录在案; 它是GNU Core Utilities的一部分.这意味着它从一开始就在每个POSIX兼容系统上.你没有使用它的事实并不意味着它不是真的.https://www.gnu.org/software/coreutils/manual/html_node/yes-invocation.html (2认同)

edd*_*ies 6

根据 Homebrew 的首席维护者

echo | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Run Code Online (Sandbox Code Playgroud)