我可以拥有目录本地的 bash 别名吗?
给定这样的目录结构:
dir1/
- .
- ..
- dir2/
- file
当我cd dir1
使用别名时eg
,它不起作用,但当我使用cd dir1/dir2/
此类别名时,它起作用。 alsias 的定义也应该是本地的,位于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
以重置您的默认设置。