【问题标题】:Unix path needs reorderingUnix 路径需要重新排序
【发布时间】:2015-04-08 17:12:34
【问题描述】:

我有一个复杂的 PATH 想要修改,但我不明白如何去做。我什至无法弄清楚某个目录是如何到达那里的。此外,它有两次。编辑路径的顺序真的这么难吗?有没有办法简单地编辑确定路径的每个文件?

【问题讨论】:

标签: linux bash unix path terminal


【解决方案1】:

一点也不难。路径是存储在进程环境 PATH 变量中的以冒号分隔的字符串。如果您更改字符串的值,您的命令搜索路径将更改。仅此而已。

PATH=/bin:/usr/bin:/usr/local/bin:$HOME/bin:.

默认路径是在您从 /etc 中的系统默认 bashrc 文件以及本地配置的 .rc 和 .bashrc 文件登录时创建的。您可以在 $HOME/.bashrc 中修改或编辑 PATH

编辑:一般来说,因为它很容易更改,所以 bashrc 文件中包含的每个脚本,无论是直接还是通过另一个脚本,都可以修改路径。要知道哪个在进行特定更改,您必须跟踪脚本。

【讨论】:

  • 我查看了/etc/bashrc、~/.bashrc 和~/.profile,没有找到我要删除的目录。这就是为什么我正在努力解决它。我还应该去哪里寻找?我知道 /etc/paths.d 也有助于 PATH 变量,但它也不存在。
  • 尝试二分搜索——在 ~/.bashrc 的顶部打印 $PATH,看看它是由系统添加的还是由本地 rc 文件添加的。再次登录(例如ssh localhost)并查看它的内容。然后你可以从那里向上或向下移动。
  • 对 PATH 进行后期处理以删除您不想要的目录可能更容易 -- PATH=$(echo -n $PATH | sed -e 's|:/unwelcome/path:|:|g')
  • 我以为我可以使用 grep 找到目录字符串,但那不起作用。刚才我确实使用了你的后期处理想法,但它需要调整,因为它删除了两个实例(我只想删除重复的)。
  • 哦,我以为你想删除两者。如果你从 sed -e 替换的末尾去掉|g',它只会删除第一个实例('g' 是 sed 的 s/// 替换命令的“全局在线”标志)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
  • 2012-05-25
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多