Остановить вывод команды bind -x от перезаписи текущей строки подсказки.

Вопрос или проблема

У меня определены следующие два алиаса bash в .bash_aliases:

# Лучше ls -al
bind -x '"\el":"command ls -lAtr"'

# Показать 10 новейших файлов в папке
bind -x '"\eh":"command ls -1U | head"'

Теперь, когда я нажимаю Alt+h или Alt+l для вызова команды, вывод команды перезаписывает последний запрос оболочки. Это затрудняет определение, где начинается и заканчивается ls (если он вызывается несколько раз). Как я могу предотвратить это?

Ответ или решение

Для решения проблемы с сохранением текущей строки приглашения в Bash при использовании команд bind -x, можно применить несколько подходов, чтобы вывод команд не перекрывал последний приглашение. Это особенно актуально в случае, когда вы используете сочетания клавиш, такие как Alt+h и Alt+l, для отображения списка файлов.

Решение проблемы

  1. Использование printf для вывода:

    Вместо прямого вызова команды ls, можно использовать функцию printf, чтобы сначала очищать экран и затем выводить информацию. Это позволяет избежать перезаписи строки приглашения:

    alias ls='command ls -al'
    bind -x '"\el":"printf \"\\033c\"; command ls -lAtr; echo; read -n 1 -s -r -p \"Press any key to continue...\"; clear; echo"'
    bind -x '"\eh":"printf \"\\033c\"; command ls -1U | head; echo; read -n 1 -s -r -p \"Press any key to continue...\"; clear; echo"'

    В этом подходе:

    • printf "\033c" очищает экран.
    • read -n 1 -s -r -p "Press any key to continue..." позволяет пользователю увидеть вывод и нажать любую клавишу, чтобы продолжить.
    • clear очищает экран снова перед тем как показать следующее приглашение.
  2. Сохранение истории и формата вывода:

    Чтобы сохранить историю предыдущих команд и иметь возможность перемещаться по ней, стоит убедиться, что приглашение не удаляется. Используйте следующие команды:

    export PROMPT_COMMAND='history -a; history -n'
  3. Стилизация вывода:

    Чтобы улучшить видимость вывода команд, вы можете добавить стилизацию (цвет) в ваш вывод с помощью ANSI escape кодов. Это поможет пользователю лучше воспринимать информацию.

    Пример использования цвета:

    bind -x '"\el":"echo -e \"\033[1;32m\$(command ls -lAtr)\033[0m\"; echo; read -n 1 -s -r -p \"Press any key to continue...\""'
  4. Использование функций вместо alias:

    Если вам нужно больше гибкости, рассмотрите возможность создания функций вместо простых алиасов. Например:

    function myls {
       command ls -lAtr
       echo
       read -n 1 -s -r -p "Press any key to continue..."
       clear
    }
    bind -x '"\el":"myls"'

Заключение

Вышеописанные методы помогут сохранить строку приглашения и улучшить восприятие выводимых данных. Путем применения команды printf, добавления цвета в вывод и создания функций вы можете сделать работу в терминале более удобной и информативной. Применяйте данные советы, чтобы сделать вашу среду работы более организованной и эффективной.

Оцените материал
Добавить комментарий

Капча загружается...