微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建指向远程目录的 $HOME/bin 符号链接,该目录与 $PATH

如何解决创建指向远程目录的 $HOME/bin 符号链接,该目录与 $PATH

我在我的主目录下创建了一个文件夹,称为配置文件。我已将点配置文件移动到此文件夹,然后在主文件夹中使用 ln -s ~/profiles/.bashrc ~/.bashrc 之类的命令符号链接到它们。

同样,我在 $HOME 目录中为特定于用户bin 文件夹创建了以下符号链接ln -s ~/profiles/bin ~/bin

我的 PATH 包含 ~/bin(即实际上是 /home/<me>/bin),经过上述步骤后,它实际上是指向 ~/profiles/bin 文件夹的符号链接

但是,当我在命令行上不使用相对或绝对路径时,为什么 shell 找不到我放置在 ~/profiles/bin 中的具有可执行权限的脚本?例如对于我下载到 bin 文件夹中的 ack 脚本,

$ ack 你好 *.txt

额外信息: 你可能会问我为什么要这样做。好吧,我想在 ~/profiles/ 文件夹中创建一个 Mercurial 存储库,其中包含我所有的 linux 配置和自定义,但我希望它与我直接在 $HOME 文件夹中创建的存储库分开,该存储库将捕获我的用户文件,例如我对文档的编辑等,位于 $HOME 直接下的多个子文件夹中。

我的想法是我希望能够轻松地将在我的配置文件中所做的修改拉/传输到不同的 linux 机器,而无需将我的数据文件带到我带来配置文件自定义的每台机器上。然而,我仍然想直接在 $HOME 文件夹中为每台机器创建一个 repo(同时忽略配置文件文件夹和 bin 文件夹)来捕获我的用户数据。

举个例子,如果我有机器 A 和机器 B,我会有 3 个仓库:

  • repo1 本质上是我的“个人资料”存储库,会捕获我的 $HOME/profile 文件夹中的所有内容
  • 虽然 repo2 将捕获位于 MachineA 上 $HOME 中的所有其他内容
  • 和 repo3 将捕获位于 MachineB 上 $​​HOME 中的所有其他内容
  • 我们不想在机器 A 和机器 B b/c 之间克隆用户数据,因为数据不属于相反的机器(它们是为不同的目的而构建的)。
  • 此外,像 .bashrc 这样的符号链接将在 repos 2&3 中提交并且是静态的,因此当我更新实际配置文件或在 ~/profiles/bin 中添加新脚本时,它们不会改变。我可以轻松地在我的配置文件和数据中独立跟踪更改,可能会在任一存储库上及时恢复,而不会影响另一个存储库。

然后,我将能够通过 repo1 轻松地将我的配置文件自定义拉取并保持同步到任一机器,包括我编写/下载的任何自定义脚本,以使用 ~/profiles/bin 中的命令扩充 shell(例如 {{ 1}})。然后我实际上可以执行自定义命令,就好像它是操作系统的一部分一样,因为 $PATH 中的 ~/bin 实际上是一个指向 ~/profiles/bin 的符号链接,而不必在 ENV $ 中添加一个路径路径。

我并不是说这是构建事物的最佳方式(还有一些我不想详细说明并使这个线程更长的细节)。我明白我可以轻松地将“~/profiles/bin”直接添加到 $PATH,或者将我的数据推送到主“$HOME/docs”文件夹下,这样配置文件仓库就可以直接在 $HOME 下,repo2 可以'docs' 文件夹中单独存在,但我更好奇为什么 shell 在扫描 $PATH 变量中引用的可执行文件时不遵循符号链接,而我目前设置的方式是这样的。


(回答问题) 而不是屏幕截图(为了某些细节(工作环境)的安全性),我从终端复制以下输出。我正在尝试运行 ack 以查看管理员尚未安装 perl-doc 软件包的系统上安装了哪些 perl 模块。我可以将程序作为 perldoc perllocal~/bin/perldoc perllocal 运行,但不能从任何位置本地运行,甚至不能直接在 bin 目录(我路径中的第一个位置)中运行,因为它无法识别“bin”符号链接重定向和在执行 perldoc 之前回退到第三个条目 (/usr/bin)。

~/profiles/bin/perldoc perllocal

最后一行从我从不同系统复制的 /usr/bin/perldoc 文件中吐出帮助语法,当使用 > rthils@MachineA:~/bin $ pwd -P > /home/rthils/profiles/bin > rthils@MachineA:~/bin $ ll > total 4 > -rwxr-x--- 1 rthils rthils 275 Jul 29 23:19 perldoc > rthils@MachineA:~/bin $ echo $PATH > /home/rthils/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games > rthils@MachineA:~/bin $ cd .. > /home/rthils > rthils@MachineA:~ $ > rthils@MachineA:~ $ ll > total 36 > lrwxrwxrwx 1 rthils rthils 14 Jul 29 23:34 bin -> ./profiles/bin > drwxr-x--- 4 rthils rthils 4096 Jul 29 23:35 profiles > rthils@MachineA:~ $ perldoc > You need to install the perl-doc package to use this program. > rthils@MachineA:~ $ type perldoc > perldoc is hashed (/usr/bin/perldoc) > rthils@MachineA:~ $ cat /usr/bin/perldoc > #!/bin/sh > # place-holder,diverted by perl-doc > echo You need to install the perl-doc package to use this program. >&2 > exit 1 > rthils@MachineA:~ $ cd bin > rthils@MachineA:~/bin $ ll > total 4 > -rwxr-x--- 1 rthils rthils 275 Jul 29 23:19 perldoc > rthils@MachineA:~/bin $ perldoc > You need to install the perl-doc package to use this program. > rthils@MachineA:~/bin $ cd ~/profiles/bin > rthils@MachineA:~/profiles/bin $ ll > total 4 > -rwxr-x--- 1 rthils rthils 275 Jul 29 23:19 perldoc > rthils@MachineA:~/profiles/bin $ perldoc > You need to install the perl-doc package to use this program. > rthils@MachineA:~/profiles/bin $ ./perldoc 运行时会显示 perl 模块。

我没有指定 bash vs shell b/c 我有一些必须使用 ksh 的环境,所以不想只找到可行的解决方案,但是 .bashrc 是一个简单的例子,可以说明我正在尝试的内容通过分离和链接到我的个人资料来完成。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。