我正在尝试覆盖“ ls”命令以在“ dotfiles”目录中显示点文件。
这是我的代码。
def _ls():
if $(pwd).rstrip(os.linesep) == $DOTFILES:
ls -Ga
else:
ls -G
aliases['ls'] = _ls
由于_ls
函数调用ls
命令并调用_ls
函数,因此该代码陷入了无限循环。
有什么想法吗?
答案 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
的逻辑是确保参数不重复(尽管我不确定这是绝对必要的)。