Intereting Posts

Возврат карты без другого ввода в псевдоним

Я хотел бы использовать Return без каких-либо других входных данных для запуска команды aliased в оболочке. Возможно ли это в Bash или Zsh?

Другими словами, когда я вхожу в пустую командную строку, я хочу запустить одну конкретную команду. Разумеется, другие командные строки не будут затронуты.

$ ls <Return> → run ls $ <Return> → run my aliased command 

Не уверен, что вы имеете в виду, но с zsh :

 accept-line() {: "${BUFFER:="my-aliased-command"}"; zle ".$WIDGET"} zle -N accept-line 

Нажатие Enter в пустом буфере запускает my-aliased-command

Это переопределение виджета accept-line как функции. В виджетах zle (zsh line editor) $BUFFER содержит содержимое командной строки. Поэтому здесь мы устанавливаем его в my-aliased-command если он был ранее пустым, а затем запускаем встроенный виджет .accept-line ( .accept-line ).

Обратите внимание: это означает, что команда my-aliased-command будет добавлена ​​в историю команд.

Если вы этого не хотите, может быть другой подход:

 accept-line() { if [[ -z $BUFFER ]]; then zle -I my-aliased-command else zle ".$WIDGET" fi } zle -N accept-line 

Если $BUFFER пуст, аннулируйте приглашение (нет необходимости делать это, если команда ничего не выводит) и запустите команду my-aliased-command . Запустите встроенную accept-line противном случае.

Это возможно в bash 4, но более громоздко, чем в zsh . Вам нужно определить функцию для проверки, если пустая строка командной строки; командная строка находится в переменной READLINE_LINE . Легче использовать эту функцию, чтобы вставить нужную команду для пустых строк, вместо того, чтобы организовать тихое выполнение команды. После запуска этой функции введите последовательность клавиш, которая привязана к отображению по умолчанию для Return ; Ctrl + J обычно является синонимом. Неиспользованный код.

 insert_default_command_if_empty () { if [[ -z $READLINE_LINE ]]; then READLINE_LINE='ls -l'; fi } bind '"\e[z1~": insert_default_command_if_empty' bind '"\Cm": "\e[z1~\Cj"'