Использование nohup, когда требуется начальный ввод

В системе Linux есть какой-либо способ использовать nohup, когда процесс, для которого выполняется nohuped, требует ввода, например, команда rsync, для которой требуется ввести пароль, но затем он будет работать самостоятельно?

5 ответов

Решение

Если команда не должна быть написана в сценарии, вы можете сделать это следующим образом:

  1. запустить его на переднем плане
  2. приостановить его (CTRL+Z)
  3. откажитесь от него, чтобы он не закрывался при закрытии оболочки (disown -h %jobid)
  4. возобновить работу в фоновом режиме (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.

нашел это в справочной странице

Помимо того, что было сказано выше, наиболее общим решением может быть обертывание команды в сценарии, который принимает входные данные из файла и передает его (возможно, с использованием каналов или ожидаемого, или что-то в этом роде). Сам скрипт-обёртка - это просто обычная команда, которая, конечно, не требует ввода.

Другие вопросы по тегам