2014-08-27 108 views
10

很簡單的腳本,安裝自制軟件:繞過提示(按回車鍵)在自制安裝腳本

#!/bin/bash 

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

輸出給:

==> 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 

如何按在這樣的輸入腳本?預計會是最好的路線?

+1

要做的第一件事就是看你能不能跳過由'的/ dev/null'重定向標準輸入:'紅寶石-e 「$(curl ...)」 2014-08-27 19:28:38

+0

...這意味着如果自制軟件在這種情況下中止,您可以提交一個錯誤(或提交補丁),因爲它不*行爲良好。 – 2014-08-27 19:28:55

+0

'ruby -e ... <(yes'')'是另一種方法,它將依靠「是」程序來持續生成肯定。不要這樣做,除非'不起作用。 – 2014-08-27 19:29:38

回答

14

讀取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 
11

這是yes是:

yes '' | ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" 
+2

@datasmid這裏*有*兩者之間的差異,我的解決方案不依賴於未公開的功能而工作 - 「它只會提示stdin是否是TTY」。 – l0b0 2015-02-12 08:08:27

+1

@ l0b0,但是,如果沒有記錄它會從標準輸入讀取而不是從TTY讀取,那麼我們沒有(記錄的,正在進行的)保證這一操作無論如何都是有效的。全面依賴無證行爲。 – 2015-03-31 21:34:26

+1

@datasmid'yes'並且始終記錄在案;它是GNU Core Utilities的一部分。這意味着它從一開始就在每個符合POSIX標準的系統上。你沒有使用它的事實並不意味着它不是真實的。 https://www.gnu.org/software/coreutils/manual/html_node/yes-invocation.html – 2017-01-12 20:02:38