как это не работает?

alias push-bb="ssh-agent /bin/bash && ssh-add ~/.ssh/bitbucker_rsa && git push"

Я предполагаю, что он отменяет в /bin/bash часть?

1 ответ1

1

Я предполагаю, что вы ожидаете, что && будет работать так:

  1. делать вид, что ssh-agent /bin/bash был напечатан
  2. делать вид, что Enter был нажат
  3. сделайте вид, что ssh-add ~/.ssh/bitbucket_rsa напечатан
  4. притвориться, что Enter нажали ...

Но это не так. Псевдонимы не являются "ложным вводом с клавиатуры", а && не является "ложной клавишей ввода". Оболочка интерпретирует их напрямую как команды. Так что на самом деле это работает так:

  1. запустите ssh-agent /bin/bash
  2. дождитесь его выхода
  3. запустите ssh-add ~/.ssh/bitbucket_rsa
  4. ждать его выхода ...

Таким образом, псевдоним не "отменяется" на шаге 1.

Это на самом деле начать вам новую копию / бен / Баш, и теперь у вас есть Баш работает внутри Баш - они просто выглядят идентичными друг другу, так что вы не заметили его. Но присмотритесь к ps xf и вы увидите:

123 xterm
└ 124 bash           waiting for its child (124 ssh-agent) to exit
  └ 678 ssh-agent    waiting for its child (679 bash) to exit
    └ 679 bash       waiting for keyboard input

Вместо этого псевдоним ожидает завершения шага 1.

Если вы наберете exit прямо сейчас, то выйдет 2-й bash (вместе с ssh-agent), и ваш псевдоним продолжится с этой точки, и все оставшиеся команды будут интерпретированы в исходной оболочке bash.


Вместо этого вы, вероятно, хотите это:

alias push-bb="ssh-agent /bin/bash -c 'ssh-add ~/.ssh/bitbucker_rsa && git push'"

Здесь, вместо ожидания ввода с клавиатуры, "новому" bash прямо предписывается выполнить оставшиеся две команды.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .