Призначте callback / hook в bash так, щоб у будь-який час виконувалася одна команда, інша виконувалася спочатку?


3

Кожного разу, коли я біжу ssh (або scp або lftp ), Я б хотів запустити gpg-connect-agent updatestartuptty /bye спочатку. (Це довга історія.)

Наразі у мене є функція, визначена в моєму .bashrc:

ssh()
{
  gpg-connect-agent updatestartuptty /bye >/dev/null 2>&1
  $(which ssh) "$@"
}

Це працює дуже добре, але я уявляю, що потенційно можуть виникнути проблеми з портативністю, якщо вони використовуються в іншій системі, де ssh вже схожий на інший.

Чи є спосіб визначити попереднє виконання "зворотного виклику" на ssh без перевизначення ssh сама команда? (Я знаю, що ви можете використовувати trap DEBUG запустити задану команду до кожної команди, але я хотів би обмежити це лише командами, які мені потрібні.)


Це було б настільки ж неспортивним, як ви б знову повинні налаштувати його. Іншим варіантом було б зробити ssh символічну посилання на ваш сценарій, але ви, ймовірно, зіткнетеся з усіма видами проблем з цим. Але ви були б незалежними.
Seth

Не впевнений, що я розумію ваше питання, але якщо ви працюєте \ssh ви перекриваєте будь-який набір псевдонімів і використовуєте початкову команду. Так що ви можете зробити це: 1. Зателефонуйте вашій функції по-різному, щоб вона не перекривалась ні з чим ssh виклик у функції \ssh
Anon

@Seth: я запитую, чи має bash будь-який вбудований механізм зворотного виклику перед виконанням команд - ідея полягає в тому, що встановлення зворотного виклику буде менш нав'язливим, ніж просто перевизначення команди з функцією з тим же ім'ям, і Не потрібно використовувати окремий файл сценарію. @Anon: Я вважаю, що передоплата з `` перекриває псевдоніми, але не функції.
Ryan Lue

Відповіді:


1

Я пропоную замість цього написати:

ssh()
{
  gpg-connect-agent updatestartuptty /bye &>/dev/null
  command ssh "$@"
}

Подивитися help command для більш докладної інформації.

І ні, немає іншого "механізму попереднього зворотного виклику". Якщо є, то, що ви робите, це в основному "це".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.