Как я могу запускать команды локально после выполнения команд ssh в сценарии оболочки?

#shell #ubuntu #scripting

#оболочка #ubuntu #сценарии

Вопрос:

Я пытаюсь написать сценарий оболочки на Ubuntu 16.04, который будет выполнять команду на другом компьютере удаленно, а затем выполнять другие команды локально. Я пробовал это, и это не работает

 #!/bin/bash

ssh username@10.200.31.131 'pkill iperf'
ssh -f username@10.200.31.131 'iperf -s'

iperf -c 10.150.91.175 >iperflog.txt
  

Он выполнит первые 2 команды на удаленном сервере, но я думаю, что он также пытается выполнить последнюю команду и на удаленном сервере, и я хочу выполнить последнюю на локальном сервере. Как я могу это сделать? Спасибо

Комментарии:

1. команды выполняются по одной за раз, поэтому удаленный iperf завершается до запуска локального. Я не думаю, что это то, чего вы хотите. Возможно, вам нужно запустить удаленный ssh в фоновом режиме, т.Е. ` ssh -f user @ ….. ‘iperf -s’amp;` . Удачи.

2. Спасибо за ваш комментарий. Я должен был упомянуть — команда ‘iperf -s’ будет запускать сервер iperf постоянно, пока он не будет остановлен

3. пожалуйста, попробуйте ssh -f user@... 'iperf -s'amp; . Я думаю, это решит вашу проблему. Невозможно, чтобы последний cmd (локальный iperf ) был запущен на удаленном компьютере. Вы можете увидеть, что происходит в вашем сценарии оболочки, включив отладку / трассировку оболочки в set -vx верхней части сценария. Без amp; , вы увидите, что последняя команда никогда не выполняется, в то время как, если вы запустите первый iperf w amp; , вы увидите выполнение последней команды. Удачи.

Ответ №1:

Возможно, ваша команда остается зарегистрированной!

Попробуйте добавить a ; /bin/bash в конец вашей командной строки на удаленной стороне

 ssh username@10.200.31.131 'pkill iperf; /bin/bash -i'
  

я надеюсь помочь вам