我总是在我的 中~/bin
添加。正如 Ubuntu 中的默认设置一样。$PATH
~/.profile
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
但是,在试用软件、编写脚本或测试没有 PPA、makefile 等的新软件时,我更喜欢将它们组织到目录中。例如(目前我的 ~/bin 中有大约 12 个这样的项目):
ber@audrey:~ ☙ ls bin/replicatorg-0033/
contributors.txt examples lib-i686 license.txt readme.txt scripts todo.txt
docs lib lib-x86_64 machines replicatorg skein_engines tools
这是一些 java 应用程序。replicatorg
是可执行文件。
现在,我可以做四件事,但我正在寻找另一种更好的方法:
- 符号链接可执行文件
~/bin
.ln -s bin/replicatorg-0033/replicatorg bin/replicatorg
。有时可行,但在本例中不行。该应用程序编写得不好,需要与其二进制文件相关的库:当符号链接或从其目录中复制时,它将无法运行。 - 还将每个子目录添加到 $PATH。但这意味着每次移动、下载或 git-clone 新目录时都要编辑 ~/.profile。
- 通过创建 makefile/install 脚本在系统范围内正确安装应用程序。大多数应用程序都是快速破解的,丑陋的,开发中的脚本和工具,在我看来这不是一个好主意。
- 将 ~/replicatorg-0033/ 的所有内容移到 ~/bin 中。对的。
那么:您如何组织您的~/bin
?
答案1
- 将每个子目录也添加到 $PATH。但这意味着每次我移动、下载或 git-clone 新目录时都要编辑 ~/.profile。
无需每次都进行编辑,请尝试以下操作:
if [ -f ~/bin ]; then
for i in $( find ~/bin -type d ); do
PATH=$PATH:$i
done
fi
答案2
我创建了一个单独的目录来存放软件包(~/apps
)。如果我想在 中包含某个程序$PATH
,我会在 中创建一个符号链接,或者如果该程序不喜欢符号链接,我~/bin
会在 中创建一个 shell 脚本包装器:~/bin
#!/bin/sh
exec ~/apps/package/bin/someprogram "$@"
$PATH
对于包含许多程序的大型软件包,最好将目录添加到您的目录中,以避免~/bin
目录中包含指向单个项目的多个符号链接。不过这取决于您的个人喜好。