Как переопределить встроенную команду в 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 логика состоит в том, чтобы убедиться, что аргументы не дублируются (хотя я не уверен, что это строго необходимо).

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