Сценарий Linux Shell выполнен, но не возвращается в командную строку - PullRequest
0 голосов
/ 07 марта 2019

У меня есть скрипт, который запускает одну из следующих строк

sudo -u $USER $SUDOCMD &>>stdout.log

Команда sudo - это процесс в реальном времени, который выводит на консоль множество вещей.

После запуска сценария каждый раз, сценарий не возвращается в командную строку. Вы должны нажать Enter или Ctrl + C, чтобы вернуться в командную строку.

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

спасибо.

1 Ответ

0 голосов
/ 07 марта 2019

Вероятно, здесь происходит то, что ваш скрипт печатает двоичные данные в TTY, а не выводит текст в стандартный вывод / ошибка, и это скрывает ваше приглашение.Например, вы можете попробовать это:

$ PS1='\$ '
$ (printf "first line\nsecond line\r" > $(tty)) &>> output.log

Вторая команда приведет к двум строкам вывода, вторая будет "смешана" с вашим приглашением:

first line
$ cond line

Когда выМожно видеть, что курсор находится на «с», но если вы начнете печатать, остальная часть строки будет перезаписана.Здесь произошло следующее:

  1. Вы нажали Введите , чтобы выполнить команду, поэтому курсор переместил строку вниз.
  2. Команда ttyпечатает путь к файлу терминала, что-то вроде "/ dev / pts / 1".Запись в этот файл означает, что вывод не идет к стандартному выводу (который обычно связан с терминалом), но напрямую к терминалу.
  3. подоболочка (аналогична выполнению команды всценарий оболочки) гарантирует, что первое перенаправление не будет переопределено вторым.Таким образом, вывод printf поступает непосредственно на терминал, и ничего не поступает в выходной журнал.
  4. Теперь терминал продолжает печатать вывод printf, который заканчивается возвратом каретки.Возврат каретки перемещает курсор в начало строки, в которую вы уже написали, и именно там появляется ваша подсказка.

Кстати:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...