Как написать псевдоним с несколькими командами в 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 с примерами, допускающими копирование. Лучший документ для новых пользователей.

Другие вопросы по тегам