如何在每个目录的基础上设置别名?

B S*_*ven 21 bash directory alias function

假设您有一个 alias go,但希望它在不同的目录中做不同的事情?

在一个目录中它应该运行cmd1,但在另一个目录中它应该运行cmd2

顺便说一句,我已经有一个用于切换到上述目录的别名,那么是否可以将go别名分配附加到foo别名?

alias "foo=cd /path/to/foo"
Run Code Online (Sandbox Code Playgroud)

在 OSX 上使用 bash(?)。

Ber*_*ard 17

不完全确定您要问什么,但别名只是扩展为别名中的内容。如果您有两个别名,则可以附加不同的命令,甚至是别名。

alias "foo=cd /path/to/foo; go"
alias "foo2=cd /path/to/foo2; go"
Run Code Online (Sandbox Code Playgroud)

在任何其他情况下,您可以在您的 .bashrc

function go ()
{
    if [ "$PWD" == "/path/to/foo" ]; then
       cmd1
    elif [ "$PWD" == "/path/to/go" ]; then
       cmd2
    fi;
}
Run Code Online (Sandbox Code Playgroud)

如果您有更多选择,最好使用案例结构。


tek*_*aul 8

如果将以下函数添加到.bashrc中

function cd () { 
  builtin cd "$@" && [[ -f .aliases ]] && . .aliases
  return 0
}
Run Code Online (Sandbox Code Playgroud)

每次您 cd 到包含 .aliases 文件的目录时,都会获取该文件。

如果其他人可以在您的计算机上创建文件,请注意安全。

使用这个技巧,别名永远不会被删除,但您可以在函数中编写任意数量的代码。

Ondir使用了这个技巧并且有大量的附加功能。

http://swapoff.org/ondir.html#download


Ema*_*erg 5

我感觉您非常“面向目录”,在这种情况下,这可能更适合您的心态。

(但老实说,我认为这完全是个坏主意,您希望命令是全局的。)

在 中.bashrc,放入alias go="./.cmd"(然后source ~/.bashrc)。

然后,在每个这样的目录中,放置一个名为.cmd, then的脚本chmod +x .cmd,然后go做你想做的事。

  • 这是很多工作......这是用例:在运行测试时,我想为 rspec-all 设置别名以运行某些测试。但是哪些测试取决于项目。这是由目录决定的。 (2认同)
  • 我所看到的,您有两个选择,要么使用一个函数(如上面描述的@Bernhard),要么根据目录进行分支(就像他说的那样),或者,您可以将参数放在目录中。想想看,它不一定是脚本,您可以在每个目录中放置一个文件(`touch .TESTNO; echo 2 > .TESTNO`),然后在您的函数中查找该文件,并根据 .TESTNO 文件包含的测试编号进行分支。虽然并不难,但您可能无法为此使用别名;你必须使用一个函数。 (2认同)

Bry*_*gyi 5

我正在开发一个项目来实现这一目标。检查一下:localalias

这是一个演示:

在此输入图像描述

有趣的是,我实际上go在演示中用作示例。我没有显示切换目录(我应该在演示中更改一些内容),但该la命令的函数确实是它们定义的目录的本地函数。