如何在Xonsh中覆盖内置命令?

时间:2019-06-07 10:06:16

标签: python shell xonsh

我正在尝试覆盖“ ls”命令以在“ dotfiles”目录中显示点文件。

这是我的代码。

def _ls():
    if $(pwd).rstrip(os.linesep) == $DOTFILES:
        ls -Ga
    else:
        ls -G
aliases['ls'] = _ls

由于_ls函数调用ls命令并调用_ls函数,因此该代码陷入了无限循环。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

不应该发生无限别名调用-您介意在github.com/xonsh/xonsh/issues上发布一个问题吗?

在此期间,这是一种构造别名的方法,该别名无需任何修复即可工作:

/

def _ls(args): args = args[0].replace('-', '') if args else '' if $(pwd).rstrip(os.linesep) == $DOTFILES: $(which -s ls) @(f"-{''.join(set(args + 'aG'))}") else: $(which -s ls) @(f"-{''.join(set(args + 'G'))}") aliases['ls'] = _ls 的{​​{1}}参数跳过别名解析,因此将路径返回到实际的-s可执行文件。然后which的逻辑是确保参数不重复(尽管我不确定这是绝对必要的)。