Могу ли я иметь локальные псевдонимы bash для каталога?
Учитывая такую структуру каталогов:
dir1/
- .
- ..
- dir2/
- file
Когда я cd dir1
псевдоним eg
не работает, но когда я cd dir1/dir2/
такой псевдоним работает. Определение альсиаса также должно быть локальным, находящимся вdir1/dir2/
Вариант использования: Я программист, у меня много разных сопутствующих инструментов для моих проектов. Я хотел бы сделать псевдонимы для некоторых из них, но большинство из них будутпроект/каталогспецифический.
Я видел al
команду bash, которая могла бы это сделать, но в моей Ubuntu (14.04) ее нет.
решение1
Да. Самый простой подход — иметь файл, в котором ваши псевдонимы определены в каждом каталоге. Например:
$ cat dir1/.alias
alias eg='echo "this is dir1"'
$ cat dir2/.alias
alias eg='echo "this is dir2"'
В приведенном выше примере каждый каталог содержит файл с именем, .alias
в котором eg
определен псевдоним. Теперь cd
в один из них,источникфайл, и псевдоним становится доступным:
$ cd dir1 && source .alias
$ eg
This is dir1
$ cd ../dir2 && source .alias
$ eg
This is dir2
Если вы хотите, чтобы это происходило автоматически, добавьте эту строку в свой файл ~/.bashrc
:
## Check if an '.alias' file exists and, if it does, source it.
PROMPT_COMMAND='[ -e .alias ] && source .alias'
Переменная PROMPT_COMMAND
определяет команду, которая выполняется перед каждым показом приглашения, то есть после любой команды, которую вы запускаете. Это означает, что как только вы перейдете в каталог, содержащий файл .alias
, этот файл будет выбран.
Примечания
Это небезопасно. Любой код в
.alias
файле будет выполнен. Используйте на свой страх и риск. Ручной подход гораздо безопаснее.Любые псевдонимы, определенные в
.alias
файле, будут по-прежнему доступны после того, как вы покинете каталог, пока они не будут перезаписаны другим определением псевдонима с тем же именем. Если это проблема, вы можете очистить все псевдонимы, а затем повторно загрузить свои глобальные с помощью:unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliases
Чтобы упростить это, сделайте это функцией, добавив следующие строки в ваш файл
~/.bashrc
:clear_aliases(){ unalias -a && . /etc/bash.bashrc && . ~/.bashrc && . ~/.bash_aliases; }
После этого вы сможете выполнить
clear_aliases
сброс настроек по умолчанию.