Не знаю, как определить, работает ли сценарий оболочки в интерактивном режиме

Вы должны изменить через $? переменную. Он хранит возвращаемое значение последней команды:

id -u $username > /dev/null 2>&1 ;
if [[ "$?" -eq 0 ]]; then
        echo "username already exists."

Если оно равно 1, оно не существует.
Кстати, ваши блоки очень грязные .... Воспользуйтесь следующей ссылкой:
Отступ (набор)
Также закройте ваши блоки.

1
19.04.2019, 14:56
1 ответ

Сценарий оболочки, если только он не создан интерактивной оболочкой, очень редко запускается в среде интерактивной оболочки. Это означает, что $-не будет включать i.

Что вы можете проверить, так это посмотреть, подключен ли стандартный ввод к терминалу или нет. Это делается с помощью теста -tс аргументом0(файлового дескриптора стандартного входного потока):

running_interactively () { [ -t 0 ]; }

Это предполагает, что под «работает в интерактивном режиме» вы подразумеваете «возможность чтения ввода непосредственно с терминала».

Дополнительный тест дескриптора файла 2 (стандартная ошибка )также возможен в качестве проверки возможности полного взаимодействия с пользователем в сценарии. Взаимодействие с пользователем в основном происходит при стандартном вводе (, пользовательском вводе )и стандартных сообщениях об ошибках (, диагностических сообщениях и т. д. ):

.
running_interactively () { [ -t 0 ] && [ -t 2 ]; }

Однако проверка стандартного вывода )файлового дескриптора 1 (завершится ошибкой, если выходные данные сценария будут перенаправлены или переданы по конвейеру.

3
27.01.2020, 23:30

Теги

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