Запуск bash-скрипта после того, как WGET игнорирует чтение пользовательского ввода - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь создать bash-скрипт, который можно легко загрузить и запустить из терминала.Внутри bash-скрипта есть пара пользовательских вводов.

Running:

sudo wget -O - https://script.com/script.sh | bash

Это загрузит скрипт и запустит его с bash, но проигнорирует пользовательский ввод в script.sh:

echo "Please enter a username:"
read -p 'Username: ' uservar
echo "Please enter a strong password:"
read -sp 'Password: ' passvar
echo
echo "
user=$uservar
password=$passvar
" >> ~/.data/cred.conf
echo "Succesfully installed."

Запуск:

sudo wget -O - https://script.com/script.sh && bash ./script.sh

Работает нормально и запрашивает ввод данных пользователем.Есть ли способ заставить пользовательский ввод работать с каналом (| bash)?

1 Ответ

0 голосов
/ 19 октября 2018

из комментария

| bash <(cat) </dev/tty

почему и как это работает * Конструкция 1004 *

  • <(cat) позволяет
    • создать процесс, который читает из унаследованного ввода, вв этот момент это конвейерный вывод
    • для перенаправления вывода в дескриптор файла, используемый в качестве файла, а расширение процесса изменяется на строку, используемую в качестве имени файла
  • </dev/tty перенаправляет псевдотерминальное устройство /dev/tty на вход процесса bash
...