2014-08-27 2 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 ...)"

+0

... означает, что если homebrew прерывается в этом случае, вы можете подать ошибку (или отправить патч), потому что это не * хорошо. –

+0

'ruby -e ... <<(yes '')' - это еще один подход, который будет полагаться на программу 'yes' для непрерывного создания утверждений. Не делайте этого, если '

ответ

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

+1

@ l0b0, конечно, но если не задокументировано, что он будет читать из stdin, а не читать из TTY, тогда у нас нет (задокументированной, постоянной) гарантии, что это будет работать независимо. На недокументированное поведение полагаются на все раунды. –

+1

@ datasmid 'yes' есть и всегда были задокументированы; это часть GNU Core Utilities. Это означает, что он работает с каждой совместимой с POSIX системой с самого начала. Тот факт, что вы его не использовали, не означает, что это не реально. https://www.gnu.org/software/coreutils/manual/html_node/yes-invocation.html –

Смежные вопросы