Intereting Posts
Перемещение окна на другой компьютер Java-приложение появляется дважды в тире / доке Как использовать регулярное выражение с AWK для замены строки? Как использовать pacman на контурном изображении Arch для другой архитектуры? сценарий оболочки – команда echo не печатает в правильной последовательности Какой инструмент можно использовать для просмотра объектного файла? Как копировать / вставлять данные в буфер обмена Windows и из буфера обмена Windows в буфер обмена OpenSuse с помощью VNC? Как включить обратную косую черту \ в строку выходного формата hexdump? Как получить меньшее разрешение нагрузки в среднем (<1 минута) Неудачные зависимости, пытающиеся установить пакет 'libxml2' Манджаро: не обновлять приложение Как создать файл CSV без лишних пробелов? NetworkManager на Fedora 15 не может найти часто используемую беспроводную сеть Как найти версию xkb на моей машине Почему мое монтирование привязки видимо за пределами пространства имен mount?

Существуют ли глобальные псевдонимы в bash

Интересно, можно ли установить глобальный псевдоним в bash, например, вариант zsh -g alias, а не «глобальный» с точки зрения пользователя, но с точки зрения оболочки.

Я хочу знать: может ли псевдоним (или что-то еще?) Быть заменен в любой точке строки в bash?

например.:

alias ...='../..' 

Из bash(1) man:

 ALIASES Aliases allow a string to be substituted for a word when it is used as the first word of a simple command. [...] 

Таким образом, псевдонимы bash не имеют такой возможности, и у bash нет тривиальной возможности pre-exec (но см. Здесь для взлома).

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

 function _comp_cd() { local cur=${COMP_WORDS[COMP_CWORD]} # the current token [[ $cur =~ \.\.\. ]] && { cur=${cur/.../..\/..} COMPREPLY=( $cur ) return } COMPREPLY=() # let default kick in } complete -o bashdefault -o default -F _comp_cd cd 

Теперь, когда вы нажимаете вкладку на команде cd а слово под курсором содержит «…», каждый из них будет заменен на «../ ..». Завершение имеет небольшую проблему, хотя (за исключением ее сложности), которую вы, вероятно, можете угадать из вышеизложенного, вам нужно указать его по команде по команде.

В пакете завершения bash используется обработчик завершения по умолчанию, с помощью функции загрузки на лету, чтобы справиться с этим. Если вы чувствуете себя авантюристом, вы должны иметь возможность изменять свою внутреннюю функцию _filedir() которая используется для общего расширения файла / каталога, чтобы включить аналогичную подстановку «…».

(Все это напоминает оболочку NetWare, которая сделала «…» Just Work.)

bash aliases работают только на основе первого слова на линии и не могут быть определены в глобальном смысле, таком как zsh.

Единственное, что я могу придумать, это определить переменную, например

 export PP=../.. # $PP meaning parent of parent cd $PP/anotherDirectory 

Но, честно говоря, я бы предпочел просто набрать ../ .. в этом случае. Короче говоря, это не делает.

Алиасы Bash не имеют такой возможности, но вы можете написать:

 alias cd='cd ' alias ...='../..' cd ... # teleport to ../.. 

Объяснение:

В справочном руководстве Bash говорится:

Если последний символ значения псевдонима является пустым, тогда следующее командное слово, следующее за псевдонимом, также проверяется на расширение псевдонима.

Возможное решение – это макрос Readline . Ты можешь написать:

 set -o emacs bind '"\Cx...":"cd ../.."' 

Введите echo , Control + x,. , ,

Вы должны увидеть echo cd ../..

Видеть

  • «Связывание ключей» в синтаксисе файла Readline Init
  • help bind