未找到 Bash al(别名本地)函数

未找到 Bash al(别名本地)函数

我可以拥有目录本地的 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以重置您的默认设置。

相关内容