![如何快速切换路径(在 Bash 中)](https://linux22.com/image/1448406/%E5%A6%82%E4%BD%95%E5%BF%AB%E9%80%9F%E5%88%87%E6%8D%A2%E8%B7%AF%E5%BE%84%EF%BC%88%E5%9C%A8%20Bash%20%E4%B8%AD%EF%BC%89.png)
有时,通常是在使用 安装软件包时brew
,我想禁用/删除路径的某些部分,然后稍后恢复它们。我找不到简单的方法来做到这一点,虽然我可以编写自己的 bash 脚本来做到这一点,但我想知道是否有更简单的方法。
期望的行为(或类似的行为):
$ echo $PATH
/Users/mchenja/anaconda/bin:/usr/local/bin:/(and so on)
$ changepath "brew"; echo $PATH
/usr/local/bin:/(and so on)
$ changepath "anaconda"; echo $PATH
/Users/mchenja/anaconda/bin:/usr/local/bin:/(and so on)
这里,“brew”和“anaconda”只是用户定义的用于操作已保存路径的关键字。
bash 是否提供了内置方法来执行此操作?外部插件呢?
答案1
根据用例的复杂程度,您可以设置和/或更改变量只需一个命令通过在命令前加上变量的值。例如,
1 prompt> X=1
2 prompt> X=2 some_command arg1 arg2
3 prompt> echo $X
变量 X 在 some_command 中将是 2,但在第 3 行返回 X=1。因此,您可以暂时更改一个命令的 PATH 以删除匹配的前缀字符串(假设您的要求就这么简单),例如,
1 prompt> PATH=${PATH#/Users*:} brew ...args...
这将从 PATH 中删除以“/Users”开头并以第一个“:”结尾的前缀。例如,/Users/foo/bar:/usr/bin/....
您只需使用/usr/bin/....
。这是否比别名更容易是值得怀疑的,但它可以合并到您的别名/函数/脚本中。主要优点是它可以动态修改您的 PATH,使其与当前设置的值不同;但这也是主要缺点 :-)
答案2
在任何语言中,交换变量的内容都是最简单的事情。bash 中没有交换 PATH 变量内容的特殊功能,因为交换任何变量的内容都太容易了。
例如,你可以将其添加到你最喜欢的 shell 启动脚本的末尾:
DEFAULTPATH="$PATH"
alias dp="PATH=\"$DEFAULTPATH\""
alias ap="PATH=\"/Users/mchenja/anaconda/bin:$DEFAULTPATH\""
alias bp="PATH=\"/usr/local/bin:$DEFAULTPATH\""
现在,在运行时,您只需键入ap
、bp
或即可dp
分别在 anaconda、brew 和默认 PATH 之间切换。
答案3
使用所需的 PATH 变量创建单个文件,并将它们存储在主文件夹中的目录中。示例:
cat ~/ch_path.d/brew
PATH="/usr/local/bin:/(and so on)"
export PATH
然后你可以获取你想要的任何路径
source ~/ch_path.d/brew