2

Я пытаюсь сделать сценарий bash, который принимает пользовательский ввод и обрабатывает в соответствии с вводом.

Сценарий исполняемый и имеет шебанг.

Сценарий выглядит примерно так:

#!/bin/bash
read name -p "Enter your name" 
echo $name >> namelist.txt

Я не хочу, чтобы пользователь открыл скрипт в Терминале. Сценарий сделан исполняемым (chmod +x), и двойной щелчок по сценарию запустит его. Но это не делает паузу для ввода, и файл остается пустым.

2 ответа2

2

Вы должны иметь графический интерфейс или терминал для ввода данных пользователем. Если пользователь открывает сценарий, скажем, Nautilus, нет стандартного ввода, поэтому read сразу возвращается. Одним из возможных решений было бы заставить скрипт открыть новый терминал и выполнить себя в нем следующим образом:

x-terminal-emulator -e $0

С x-терминал-эмулятором вызывается терминал-эмулятор по умолчанию. Это работает с Debian & Ubuntu, я не знаю о других дистрибутивах. Разумеется, вы можете вызвать конкретный терминал, например, xterm, konsole или любой другой терминал.

$0 - это путь к файлу скрипта, так что это всегда работает.

Вы также должны убедиться, что он не рекурсивно открывает больше терминалов. Один из способов, которым это может сработать, - проверить, можете ли вы читать со стандартного ввода, как вы это уже делаете:

Код возврата команды чтения равен нулю, если только не встречается символ конца файла, если время чтения истекло или если в качестве аргумента для опции -u указан неверный дескриптор файла.

Поэтому проверьте возвращаемое значение, если оно есть!= 0, открыть новый терминал, как указано выше, в противном случае нет.

Пример:

#!/bin/bash

read -p "Enter first value: " first
# Check return value of last command with $?
if [[ $? != 0 ]]; then
        x-terminal-emulator -e $0
else
        echo $first
        read -p "Enter more: " more
        echo $more
fi

Посмотрите этот вопрос, если вам нужно держать терминал открытым после завершения программы.

0

Случайный удар и испытания привели меня к решению.

Если дважды щелкнуть исполняемый файл в Nautilus, откроется всплывающее окно, в котором вас попросят либо "Запустить" сценарий (без консоли), либо "Запустить в терминале", либо "Открыть" сценарий в текстовом редакторе по умолчанию.

Выбор "Запуск в терминале будет служить цели".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .