djt*_*oms 3 bash path java executable bashrc
我想知道是否$PATH 级联条目。在这里你们都需要和我一起信仰飞跃,但它就在这里。
假设我们有一个 Java 可执行文件,/usr/bin/java但此版本非常旧且过时。不幸的是,我们没有su访问权限,所以我们不能只是替换它。但是,我们可以在本地下载 JRE/JDK 的当前版本并指向更新的版本。我的问题是,bash 如何处理我们有两个或多个同名但位于两个或多个不同位置的可执行文件的情况?当我们java在控制台中键入内容时,bash 是否会以某种方式选择执行哪一个?假设/usr/bin有许多我们需要的其他可执行文件,如何$PATH寻找这样的东西才能正常工作?
理想情况下,当我们输入时,java -version我们应该看到:
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)
代替
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) Client VM(build 24.45-b08, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
我确定这个问题之前已经被问过并且有一些与之相关的术语。我在 SE、SO 和一些论坛上闲逛,但没有找到任何结论。
你$PATH被依次搜索。例如,如果echo $PATHshows /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin,则按顺序搜索每个目录以查找给定命令(假设该命令不是别名或 shell 内置命令)。
如果您想在每个用户的基础上覆盖特定的二进制文件(或者您无权覆盖除您自己以外的其他用户),我建议bin您在您的主目录中创建一个目录,然后在您的 PATH 变量前加上该目录目录。
像这样:
$ cd ~
$ pwd
/home/joe
$ mkdir bin
$ echo "$PATH"
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
$ echo 'export PATH="$HOME/bin:$PATH"' >> .bash_profile
Run Code Online (Sandbox Code Playgroud)
然后source .bash_profile新PATH定义将生效(或者只是注销并登录,或重新启动您的终端模拟器)。
$ source .bash_profile
$ echo "$PATH"
/home/joe/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
Run Code Online (Sandbox Code Playgroud)
现在,您放入的任何可执行文件都/home/joe/bin/将优先于系统二进制文件和可执行文件。
请注意,如果您确实具有系统访问权限并且覆盖应适用于所有用户,则放置覆盖可执行文件的首选位置是/usr/local/bin,这是用于此目的。事实上往往/usr/local/bin是已经在第一个目录$PATH明确允许这样。
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |