Как написать псевдоним с несколькими командами в xonsh?
В bash и zsh я писал:
alias nb='cd /home/lincoln/Dropbox/nupis/ && jupyter notebook'
Но в xonsh это возвращает ошибку о том, что команда не найдена. В разделе руководства по псевдонимам сказано, что я должен сделать что-то вроде:
aliases['g'] = 'git status -sb'
Я мог бы сделать это в случае только одной команды, но когда я пробую две команды из моего примера bash, он жалуется, что я слишком много вводил для cd
,
Примечание: я знаю, что могу импортировать псевдоним из других оболочек, но мне интересно научиться делать это в xonsh.
3 ответа
@lincolnfrias, xonsh еще не поддерживает псевдонимы строк, которые имеют несколько команд. Это ошибка / недостаток, которая, мы надеемся, скоро будет устранена. Однако до тех пор вы можете использовать псевдоним функции для этого поведения.
def _nb(args, stdin=None):
cd /home/lincoln/Dropbox/nupis/ && jupyter notebook
aliases['nb'] = _nb
Или, если вы действительно хотите сделать это в одну строку:
aliases['nb'] = lambda a, s: ![cd /home/lincoln/Dropbox/nupis/] and ![jupyter notebook]
Separating commands with ;
works fine, as in:
aliases['gp'] = 'git add -A :/; git commit -m asdf;git push;'
Псевдонимы, представляющие собой одну строку, оцениваются так, как если бы они были напечатаны, поэтому вы можете объединять команды, используя;
,&&
, и т. д.
Вы можете получить доступ к аргументам, переданным псевдониму, как$args
в контексте Python, т.е.@($args)
. Обратите внимание, что знак доллара находится внутри скобок!
Например:
robmee01@C02F2508MD6R:~
@ aliases['nb'] = 'echo cd /home/lincoln/Dropbox/nupis/ && echo jupyter notebook @($args)'
Пример использования:
user@host:~ @ nb --option1 --option2
cd /home/lincoln/Dropbox/nupis/
jupyter notebook --option1 --option2
Руководство, которое я нашел наиболее полезным: anki-code/xonsh-cheatsheet: Шпаргалка для оболочки xonsh с примерами, допускающими копирование. Лучший документ для новых пользователей.