выполнить команду через ssh, а затем запустить bash - PullRequest
5 голосов
/ 10 февраля 2011

Я пытаюсь настроить скрипт, который открывает терминал, выполняет ssh на удаленном сервере и выполняет команду (лог-файл tail -F в моем случае).

Что у меня есть до сих порэто следующее

gnome-terminal -e 'ssh -t server "tail -F logfile"'

Это работает в некоторой степени.-t гарантирует, что такие сигналы, как SIGINT, отправляются через команды, запущенные удаленно.

Однако, когда я нажимаю ctrl-c tail, мне бы очень хотелось перейти к терминалу bash на удаленном сервере .Прямо сейчас, если я ctrl-c хвостом, то хвост закрывается, что приводит к выходу из ssh, что приводит к закрытию всего терминала.

Я хотел бы, чтобы хвост был завершен иоставайтесь с оболочкой bash на удаленном сервере.

Я пробовал следующее:

gnome-terminal -e 'ssh -t server "tail -F logfile; /bin/bash"'

, но, похоже, это не работает.То есть, если я запускаю это без gnome-терминала, просто ssh -t ..., а затем вижу следующее:

some lines
from the log
^CConnection to server closed.

Но, если я делаю

gnome-terminal -e 'ssh -t server "nonexistantcommand; /bin/bash"'

Тогда яполучаю сообщение об ошибке, что nonexistantcommand не найден, и тогда я do выпадаю в bash на удаленном сервере ...

Есть ли у кого-нибудь какие-либо предложения или советы о том, как это сделать??Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

Здесь есть неприятный хак:

gnome-terminal -e 'ssh -t server "echo \"tail -F logfile;rm /tmp/foo\" > /tmp/foo; bash --rcfile /tmp/foo"'
1 голос
/ 10 февраля 2011

Почему бы не сделать очевидное?«Если вы получили SIGINT, запустите интерактивную оболочку.»

gnome-terminal -e 'ssh -t server "trap \"exec sh -i\" INT; tail -F logfile"'
1 голос
/ 10 февраля 2011
--init-file filename
--rcfile filename

Выполнение команд из имени файла (вместо `~ / .bashrc ') в интерактивной оболочке.

, поэтому запустите bash с --rcfile, указывая на скрипт, выполняющий хвост-F.

...