Различие между передачей по каналу файла к sh и вызовом файла оболочки

Это - то, что пыталось сделать:

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

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

Это - то, что на самом деле работает:

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

Но каково различие?

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

11
задан Peter Coulton 29 April 2010 в 21:33
поделиться

2 ответа

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

8
ответ дан 3 December 2019 в 10:03
поделиться

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

$ wget -qO- www.example.com/script.sh | sh -i
2
ответ дан 3 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: