【问题标题】:on the "local" toolchain in linux在 linux 的“本地”工具链上
【发布时间】:2015-10-06 17:30:51
【问题描述】:

长期潜伏者第一次海报。

我到处找过,我确信很容易找到,但我无法正确地用词搜索。

我根据教科书进行了一些编码练习,我的所有工作都在具有以下层次结构的目录中:

        r00t
       /    \
  tools      code
                 \
                  chapts

在工具目录中有几个脚本可以让我的生活更轻松。我想要的,以及我发布的原因是,只要我在 r00t 中,无论我在哪里,都能够调用 r00t/tools 中的脚本。我知道我可以将它们添加到全局 PATH 中,但这似乎很懒惰,我不希望我的 PATH 再膨胀(这是否明智?)。

那么,我可以以某种方式将脚本或程序添加到目录中的“本地路径”吗?

【问题讨论】:

  • 我所知道的任何外壳中都没有内置任何东西可以启用此功能。 git 在某种程度上通过搜索目录层次结构,寻找.git 目录来实现这一点。您最好的选择可能只是将额外目录添加到您的 PATH 中。
  • :'( 这就是我自己开始思考的问题。我想你的 $PATH 变量没有理由不能变得超级大,只是编辑起来很麻烦。不过谢谢!

标签: linux bash path


【解决方案1】:

查看hereondir (link) 程序,让您在进入或离开目录时执行脚本。

这样您就可以动态更改路径变量。然而,我必须承认我从未使用过该程序,也没有被告知其开发状态。

或者,您可以将 cd 命令替换为检查 pwd 与 r00t 目录并根据结果更新 $PATH 的脚本。当然,您的cd 会变慢,但可能不会很明显。

一个例子:

#!/bin/bash

#alternative cd

cd $*

#check for r00t directory
if [ "$( pwd | grep -o 'r00t')" == "r00t" ] ; then
  #check path variable:
  if [ "$(echo $PATH | grep -o 'r00t')" != "r00t" ] ; then
        export PATH=$PATH:/DIR/r00t/bin
  fi
else
  #remove r00t from PATH when not in r00t
  if [ "$(echo $PATH | grep -o 'r00t')" == "r00t" ] ; then
        export PATH=$( echo $PATH | sed 's~:/DIR/r00t/bin~~' )
  fi
fi

请注意,现在您必须按如下方式引入alias

alias cd='. ./path/to/script/alternative_cd.sh'

因为需要获取导出的 PATH 才能适用于您当前的 shell(如果使用 bash alternative_cd.sh,您只会获得运行脚本的子 shell 的新 PATH)

我对其进行了测试,它似乎可以正常工作。玩得开心。

【讨论】:

    【解决方案2】:

    处理此问题的常用方法是将rc file 放在每个项目目录树的根目录中。在这种情况下,r00t。调用文件r00trc 或制定您自己的命名约定。

    rc 文件应包括对命令行提示的识别更改,以便不断提醒您 shell 正在使用什么环境,并重新分配 PATH 变量以适应项目的需要,以及任何您需要的其他项目特定的环境变量、别名或颜色设置。

    在您的默认登录环境中,通过在将当前工作目录更改为r00t 之前或之后运行“bash”来生成一个子shell,然后获取r00trc 文件。这为您提供了一个带有项目环境和识别提示的 Bash shell。使用exit 退出子shell 并返回到您的默认环境。

    避免将项目 rc 文件收集到主目录或项目目录根目录以外的任何位置,以免在 tar 项目并将其归档或发送给同事时丢失。

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 2014-05-09
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2011-08-13
      • 2022-01-09
      • 1970-01-01
      • 2010-09-23
      相关资源
      最近更新 更多