как это не работает?
alias push-bb="ssh-agent /bin/bash && ssh-add ~/.ssh/bitbucker_rsa && git push"
Я предполагаю, что он отменяет в /bin/bash
часть?
Я предполагаю, что вы ожидаете, что &&
будет работать так:
ssh-agent /bin/bash
был напечатанssh-add ~/.ssh/bitbucket_rsa
напечатанНо это не так. Псевдонимы не являются "ложным вводом с клавиатуры", а &&
не является "ложной клавишей ввода". Оболочка интерпретирует их напрямую как команды. Так что на самом деле это работает так:
ssh-agent /bin/bash
ssh-add ~/.ssh/bitbucket_rsa
Таким образом, псевдоним не "отменяется" на шаге 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 прямо предписывается выполнить оставшиеся две команды.