Отправка "клавиши ввода" скрипту python из bash

Одна рекомендация ... отредактируйте вопрос следующим образом, чтобы дать более подробный / релевантный ответ:

  • Ваша ОС (т.е. Solaris сильно отличается от RHEL в acct mgmt)
  • Тип скрипта / кода ( Bash, csh, ksh и т. Д.), Поскольку похоже, что это всего лишь часть скрипта, а не все, поскольку мы не видим shebang (#! / Bin / bash и т. Д.).

Первое, что я заметил, это то, что ваша переменная $ olduser настроена не на подстановку команд, а на буквальную строку «who | grep | -u, -q +30»

Подстановка команд обычно выполняется с помощью $ (command_to_be_run) или обратных кавычек вроде `command_to_be_run` . И я не думаю, что вы ищете , который , а скорее должны смотреть, как упоминалось выше, на команды учета, такие как logins или last , или даже файлы журналов .

Что-то вроде цикла for для генерации списка пользователей, а затем с использованием этой последней и вашей подстановки переменных для генерации даты последнего входа в систему для каждого отдельного объекта, чтобы вы могли выполнить оператор оценки, такой как if-then-fi if они старше 35 дней.

например. В Solaris 10 с Bash

LAST_LOGON_DATE=$(last $user | awk 'NR==1{print $5,$6}' | custom_date_convert_cmd )

if [[ ${LAST_LOGON_DATE} -ge 35 ]]; then
    echo "${user} is expired. Last logon: ${LAST_LOGON_DATE} days ago"
    important_commands_here
fi

Очевидно, что sed / perl, вероятно, был бы лучшим решением с точки зрения скорости обработки через AWK, но если вы находитесь в исправлении и вам просто нужно что-то работать, это, вероятно, хорошее место для начала.

Найдите STIG своей системы в DISA, так как обычно они включают команды для выполнения именно этого ... проверка последних входов в систему, пользователей без паролей и т. Д.
https: //www.stigviewer.com / stigs

2
20.01.2017, 17:42
3 ответа

Мне удалось решить эту проблему с помощью экранного подхода. Это работает в фоновом режиме, и я не вижу прогресса, но для меня это нормально

screen -d -m -S umake-eclipse
screen -S umake-eclipse -p 0 -X stuff "umake ide eclipse\n\n"
2
27.01.2020, 22:03

Ответ @Kusalananda не будет работать на практике, поскольку выполнение команды umake останавливается после команды send.

Вот расширенное, рабочее решение:

#!/usr/bin/expect

spawn umake ide eclipse
expect "Choose installation path:" { send "\r" }
interact
1
27.01.2020, 22:03

Использование очень упрощенного сценария expect :

spawn umake ide eclipse
expect "Choose installation path:" { sleep 1; send "\r" }

Запуск:

$ expect -f script.expect
1
27.01.2020, 22:03

Теги

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