Функция bash al (псевдоним local) не найдена

Функция bash al (псевдоним local) не найдена

Могу ли я иметь локальные псевдонимы 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сброс настроек по умолчанию.

Связанный контент