2015-07-23 4 views
0

Я пытаюсь написать сценарий Bash, который регистрируется на двух разных силовых полосках на основе Linux (Ubiquiti Mpower Pros) и отключает 2 разных индикатора (по одному на каждой полосе). Для этого войдите в 1-ю полосу, измените соответствующий файл на 0 (таким образом выключив свет) и выйдем, повторяя тот же процесс на следующей силовой полоске. Однако после выхода из первого SSH-соединения сценарий перестает работать. Может кто-нибудь предложить исправить? Моя единственная идея - заключить этот скрипт в программу python. Вот мой код:Bash Script Quits после выхода из SSH

#!/bin/bash 
ssh [email protected] 
echo "0" > /proc/power/relay1 
exit 
# hits the enter key 
cat <(echo "") | <command> 

ssh [email protected] 
echo "logged in" 
echo "0" > /proc/power/relay1 
exit 
cat <(echo "") | <command> 
+0

Линия «выход» нарушает его для вас. Это было бы легче сделать с ожидающими скриптов. – SBH

ответ

4

ssh как приложение БЛОКОВ, пока он работает, echo и exit выполняются локальной оболочкой, а не на удаленной машине. так что вы делаете:

  1. SSH к удаленной машине
  2. выход удаленной оболочки
  3. эхо локально
  4. выход локально

и стрелы, ваш сценарий мертв. Если предполагается, что эхо/выход должен выполняться на удаленной системе, то вы должны делать:

ssh [email protected] command 
       ^^^^^---executed on the remote machine 

например.

ssh [email protected] 'echo ... ; exit' 
+0

Отличное объяснение. Теперь он работает. Спасибо. –

2

команды вы, видимо, пытаются бежать через ssh фактически выполняется локально. Вы можете просто передать команду, которую вы хотите запустить к SSH, и он будет делать это (без необходимости явного exit)

ssh [email protected] 'echo "0" > /proc/power/relay1' 

будет делать это, и аналогично для другой команды SSH

Смежные вопросы