Как автоматически запустить команду после выхода из SSH

10

Как я могу автоматически выполнить команду на локальном терминале после выхода из sshсоединения? Есть ли какой-нибудь хук или событие, которое может быть обработано для этого?

Meysam
источник

Ответы:

13

Используйте aliasили лучше функцию.

Например:

ssh () { command ssh "$@"; echo foobar; }

Теперь вы можете запустить:

ssh mysite

после выхода из sshсеанса, echo foobarбудет запущен.

Измените echo foobarфактическую команду, которую вам нужно выполнить, и, конечно, вы можете использовать несколько команд, если хотите.

Чтобы сделать определение функции постоянным, поместите его в свой ~/.bashrc.


Также обратите внимание, что не всегда желательно, чтобы функция называлась так, как sshесли вы хотите явно использовать внешнее ssh. В этом случае вы можете использовать любое из следующих действий, чтобы пропустить sshфункцию для получения внешнего sshдвоичного файла:

command ssh mysite

или переименуйте функцию во что-то другое, например sshfunc:

sshfunc () { ssh "$@"; echo foobar; }
heemayl
источник
4
примечание: я рекомендую переименовать функцию в нечто иное, чем «ssh», так что вы сохраняете ssh в первоначальном значении ... возможно: ssh2? или sshcmd? (в противном случае вы можете забыть его побочные эффекты при выполнении таких действий, как:: ssh user@host 'cd /somewhere/ && tar cf - | gzip -c -' > local_backup_of_somewhere.tgzэто будет неправильно, так как в конце он будет содержать «foobar» ...)
Оливье Дюлак
@OlivierDulac Хороший вопрос, отредактировано.
Heemayl
\ ssh 'ssh' и "ssh" экранируют только псевдоним, команда ssh запускает команду (экранируя псевдоним и функцию).
Оливье Дюлак
@OlivierDulac Не знал этого, исправлено.
Heemayl
Это похоже на bash, может меняться в зависимости от других оболочек ... но теперь мне нравится ваш ответ с этими дополнениями, вы получаете мой +1 ^^
Оливье Дюлак