Я пишу сценарий Bash для автоматизации задач на нескольких серверах.
Я подключаюсь к машине Centos 7 через SSH для запуска какого-либо редактора (nano
, vi
, ...)
ssh -tt centos@... '/bb/Conf edit'
/bb/Conf edit
в основном просто vi /bb/conf.yaml
.
Когда я запускаю команду SSH из своей оболочки, она работает нормально. Однако, когда та же команда SSH запускается из скрипта Bash внутри цикла while read ...; do
, редактор имеет неправильный размер (80x40, я думаю) и, кажется, игнорирует нажимаемые мной клавиши - то есть в nano
, Ctrl + x hasn ' ничего не делай. Единственная клавиша, которая работает, это Ctrl + c, которая закрывает соединение.
Я думал, что это что-то, связанное с переменной TERM
, согласно это , поэтому я попытался добавить export TERM=xterm
или TERM=rxvt
к /bb/Conf
или к месту, вызывающему SSH. Переменная фактически установлена в целевой среде (я пробовал echo $TERM
прямо перед vi
). Но терминал по-прежнему плохо себя вел.
Затем я попытался поместить эту единственную команду ssh ...
в новый скрипт. При этом редактор работал нормально.
Через некоторое время я обнаружил, что он работает вне цикла while read
, но не внутри. Я предполагаю, что редакторы совершают магию stdin / stdout, а затем read
как-то ломает это.
Есть ли способ запустить редактор вроде vi
или nano
из цикла?
(Цель в моем случае - позволить пользователям редактировать файлы на нескольких серверах.)