shell 如何在xonsh中编写多命令别名?

x759pob2  于 2023-03-13  发布在  Shell
关注(0)|答案(3)|浏览(145)

在bash和zsh中,我经常这样写:

alias nb='cd /home/lincoln/Dropbox/nupis/ && jupyter notebook'

但是在xonsh中,这会返回一个错误,说这个命令没有找到。别名的tutorial's部分说我应该做如下的事情:

aliases['g'] = 'git status -sb'

我可以在只有一个命令的情况下实现这一点,但是当我尝试使用bash示例中的两个命令时,它抱怨我给cd提供了太多的输入。
注意:我知道我可以从其他shell导入别名,但我对学习在xonsh中这样做很感兴趣。

jucafojl

jucafojl1#

@lincolnfrias,xonsh还不支持有多个命令的字符串别名。这是一个bug /缺陷,希望很快就能解决。不过,在那之前,你可以使用函数别名来实现这种行为。

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]
x4shl7ld

x4shl7ld2#

使用;分隔命令效果很好,如下所示:
aliases['gp'] = 'git add -A :/; git commit -m asdf;git push;'

ygya80vv

ygya80vv3#

作为单个字符串的别名就像它们被键入一样进行计算,因此您可以使用;&&等链接命令。
你可以在Python上下文中访问作为$args传递给别名的参数,例如@($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代码/xonsh备忘单:xonsh shell的备忘单,有可复制粘贴的例子。最适合新用户的文档。

相关问题