Вопрос или проблема
У меня определены следующие два алиаса 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, для отображения списка файлов.
Решение проблемы
-
Использование
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
очищает экран снова перед тем как показать следующее приглашение.
-
Сохранение истории и формата вывода:
Чтобы сохранить историю предыдущих команд и иметь возможность перемещаться по ней, стоит убедиться, что приглашение не удаляется. Используйте следующие команды:
export PROMPT_COMMAND='history -a; history -n'
-
Стилизация вывода:
Чтобы улучшить видимость вывода команд, вы можете добавить стилизацию (цвет) в ваш вывод с помощью 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...\""'
-
Использование функций вместо alias:
Если вам нужно больше гибкости, рассмотрите возможность создания функций вместо простых алиасов. Например:
function myls { command ls -lAtr echo read -n 1 -s -r -p "Press any key to continue..." clear } bind -x '"\el":"myls"'
Заключение
Вышеописанные методы помогут сохранить строку приглашения и улучшить восприятие выводимых данных. Путем применения команды printf
, добавления цвета в вывод и создания функций вы можете сделать работу в терминале более удобной и информативной. Применяйте данные советы, чтобы сделать вашу среду работы более организованной и эффективной.