Использование nohup, когда требуется начальный ввод
В системе Linux есть какой-либо способ использовать nohup, когда процесс, для которого выполняется nohuped, требует ввода, например, команда rsync, для которой требуется ввести пароль, но затем он будет работать самостоятельно?
5 ответов
Если команда не должна быть написана в сценарии, вы можете сделать это следующим образом:
- запустить его на переднем плане
- приостановить его (CTRL+Z)
- откажитесь от него, чтобы он не закрывался при закрытии оболочки (disown -h %jobid)
- возобновить работу в фоновом режиме (bg %jobid)
Вы хотите посмотреть на экран. Screen создаст для вас сеанс оболочки, который вы можете отсоединить, а затем подключить позже. Пытаться:
# screen rsync -a directory server@directory
Вы можете ввести свой пароль, убедиться, что он работает так, как вы ожидаете, и затем нажать "ctrl-a", а затем "d". Теперь вы должны быть отсоединены от вашего сеанса экрана. Если вы хотите увидеть, как это происходит, запустите
# screen -r
и ты должен быть снова прикреплен. 'ctrl-a' 'd' снова отсоединит вас.
Когда команда завершится, экран должен выйти.
Если возможно, для конкретного экземпляра команды rsync может быть лучше установить аутентификацию по ключу SSH без пароля, а не пытаться автоматически вводить пароль в rsync.
Некоторые модули на удаленном демоне могут требовать аутентификации. Если это так, вы получите запрос пароля при подключении. Вы можете избежать запроса пароля, установив для переменной среды RSYNC_PASSWORD пароль, который вы хотите использовать, или используя параметр --password-file. Это может быть полезно при написании скриптов rsync.
нашел это в справочной странице
Помимо того, что было сказано выше, наиболее общим решением может быть обертывание команды в сценарии, который принимает входные данные из файла и передает его (возможно, с использованием каналов или ожидаемого, или что-то в этом роде). Сам скрипт-обёртка - это просто обычная команда, которая, конечно, не требует ввода.