Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 是否可以定义或限制命令行别名仅在特定目录中工作?_Bash_Shell_Command Line - Fatal编程技术网

Bash 是否可以定义或限制命令行别名仅在特定目录中工作?

Bash 是否可以定义或限制命令行别名仅在特定目录中工作?,bash,shell,command-line,Bash,Shell,Command Line,我想创建一个仅在当前目录下工作的别名命令 $ foo BAR!!! $ cd .. $ foo bash: foo: command not found 有没有一种方法可以定义非全局的本地bash别名?如David C.Rankin所建议的那样,如果别名本身直接出现错误,它可以提前退出: alias foo='[ "$PWD" = /correct/path ] && ...' 或者,您可以利用PROMPT_命令在进出所需目录时定义和取消定义别名: PROMPT_COMMAN

我想创建一个仅在当前目录下工作的别名命令

$ foo
BAR!!!
$ cd ..
$ foo
bash: foo: command not found

有没有一种方法可以定义非全局的本地bash别名?

如David C.Rankin所建议的那样,如果别名本身直接出现错误,它可以提前退出:

alias foo='[ "$PWD" = /correct/path ] && ...'
或者,您可以利用
PROMPT_命令
在进出所需目录时定义和取消定义别名:

PROMPT_COMMAND='if [ "$PWD" = /correct/path ]; then alias foo='...'; else unalias foo'

(使用
PROMPT\u命令
作为更改目录钩子的代理,正如rici所指出的,假设您的shell将在
cd
命令之后,但在您尝试使用新别名之前显示一个提示。)

我已经晚了几年,但我最近刚刚完成了一个实现这一点的脚本。请查看:

它允许您创建和使用伪别名和函数,这些别名和函数是在其中定义的目录的本地别名和函数。也许最好的部分是它在不执行任何危险的“源”命令的情况下实现了这一点。这些解决方案更简单、更快,但却是一个很大的安全问题

下面是一个演示:


注意:此脚本设计用于Zsh,但将其更改为与Bash一起使用将是一个非常简单的过程。事实上,我最初设计这个脚本是为了与Bash一起使用,但后来将我的主shell切换到Zsh。只有几行代码需要更改才能与Zsh一起使用。相反的过程也会很简单。

您可以只编写一个函数,让函数检查当前目录,如果它不是它想要的,就退出它吗?您实际上可以将它塞进别名中。e、 g.
alias foo='[“$PWD”=/wanted/path]&&do stuff…”
使用复合命令。使用
PROMPT\u命令可能是最好的方法,但如果编写
cd/correct/path,则会失败;foo
。我不知道这是否重要。