Разница между передачей файла в sh и вызовом файла оболочки - PullRequest
11 голосов
/ 30 апреля 2010

Вот что пытался сделать:

$ wget -qO- www.example.com/script.sh | sh

, который спокойно загружает скрипт и печатает его на стандартный вывод, который затем передается по шу. Это, к сожалению, не совсем работает, не дожидаясь ввода пользователя в различные моменты, а также из-за нескольких синтаксических ошибок.

Вот что на самом деле работает:

$ wget -qOscript www.example.com/script.sh && chmod +x ./script && ./script

Но в чем разница?

Я думаю, что, возможно, конвейер файла не выполняет файл, а выполняет каждую строку отдельно, но я новичок в этом, поэтому я не знаю.

Ответы [ 3 ]

8 голосов
/ 30 апреля 2010

Когда вы передаете по каналу sh, stdin этой оболочки / скрипта будет каналом. Таким образом, сценарий не может взять, например, пользовательский ввод с консоли. Когда вы запускаете скрипт нормально, stdin - это консоль, в которую вы можете ввести ввод.

2 голосов
/ 02 мая 2010

Вы можете попробовать сказать, что оболочка интерактивна:

$ wget -qO- www.example.com/script.sh | sh -i
0 голосов
/ 01 марта 2014

У меня была такая же проблема, и после того, как я поработал и поиграл, это то, что сработало для меня.

wget -O - www.example.com/script.sh | sh
...