Как переопределить встроенную команду в xonsh?
Я пытаюсь переопределить команду 'ls' для отображения файлов точек в каталоге "точек файлов".
Вот мой код
def _ls():
if $(pwd).rstrip(os.linesep) == $DOTFILES:
ls -Ga
else:
ls -G
aliases['ls'] = _ls
Этот код входит в бесконечный цикл, потому что _ls
вызовы функций ls
команда и это вызывает _ls
функция.
Есть идеи?
1 ответ
Решение
Бесконечный вызов псевдонима не должен произойти - не могли бы вы открыть проблему на 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
-s
аргумент which
пропускает разрешение псевдонима, так что возвращает путь к фактическому ls
исполняемый файл. Тогда set
логика состоит в том, чтобы убедиться, что аргументы не дублируются (хотя я не уверен, что это строго необходимо).