因为 Ubuntu 没有为 TeXLive 提供最新的软件包,所以我手动安装了它。但是,某些程序需要 TeXLive 作为依赖项。所以我所做的是我从 Ubuntu 存储库中安装了 TeXLive 包,这是 2009 版本。然后我更改了我的 $PATH 以包含手动安装的 2011 版本,因此程序仍然始终指向并使用最新的 TeXLive 版本。到目前为止,这工作正常。
但这里有一个要点:当我切换到 VIM 来编辑我的 LaTeX 文件时,我注意到 VIM 只“看到”了 TeXLive2009,非常头疼!看这个截图,左边是VIM,右边是终端:

然后我检查了 $PATH VIM 正在使用的内容,事实证明,它使用的是不同的,不指向 TeXLive 2011。请参阅此屏幕截图:

维姆:
:! echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)
终端:
echo $PATH
/usr/local/texlive/2011/bin/x86_64-linux:/usr/local/texlive/2011/bin/x86_64-linux:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)
你知道如何解决这个问题,所以我的 LaTeX 插件可以使用 TeXLive 2011,也许通过让 VIM 使用相同的 $PATH?任何帮助将不胜感激!
I am specifying path to my command in the file /etc/profile:
export PATH=$PATH:/usr/app/cpn/bin
Run Code Online (Sandbox Code Playgroud)
My command is located in:
$ which ydisplay
/usr/app/cpn/bin/ydisplay
Run Code Online (Sandbox Code Playgroud)
So, when I performing "echo $PATH" output is looks like:
$ echo $PATH
...:/usr/app/cpn/bin
Run Code Online (Sandbox Code Playgroud)
And everything is OK, but when I am trying to launch my command via SSH I am getting error:
$ ssh 127.0.0.1 ydisplay
$ bash: ydisplay: command not found
Run Code Online (Sandbox Code Playgroud)
But the my path is still present:
$ ssh 127.0.0.1 echo $PATH
...:/usr/app/cpn/bin
Run Code Online (Sandbox Code Playgroud)
Please …
我正在使用一个名为 node-webkit 的程序,但是如果不指定可执行文件的完整路径,我将无法启动该程序。有什么方法可以将命令(例如node-webkit)与 Linux 上的可执行文件相关联,以便不需要指定文件的完整路径?
which -a ruby 给我
/usr/ruby
/usr/ruby
/usr/ruby
Run Code Online (Sandbox Code Playgroud)
它给出了三次相同的路径。为什么会发生这种情况?
我很困惑 PATH 环境变量在 Linux 下是如何工作的。我是 Linux Mint 15 用户。
首先,我阅读了有关编辑/home/.bashrc文件和执行.a文件的内容PATH=$PATH:/directory,
但我也知道其中管理的一些路径内容/etc/bash.bashrc
,因此/usr/local/bin可以从 shell 的任何位置访问安装在其中的任何软件。
路径变量在Linux下是如何工作的,应该放在哪里?
我首先要说的是,我认为这个问题没有听起来那么天真。
我需要做的是:检查 PATH 环境变量中的文件夹。它可能在开始时或之后的某个地方。我只需要验证该文件夹是否在那里。
我的问题示例 - 让我们使用/opt/gnome.
场景 1:文件夹不在 PATH 的开头
# echo "$PATH"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
# echo "$PATH" | grep ":/opt/gnome"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
Run Code Online (Sandbox Code Playgroud)
请注意,grep 需要足够具体,以免捕获/var/opt/gnome. 因此冒号。
场景 2:文件夹位于 PATH 的开头。
# echo "$PATH"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
# echo "$PATH" | grep "^/opt/gnome"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
Run Code Online (Sandbox Code Playgroud)
这是我的问题 - 我需要在此文件夹中搜索冒号或行首。我想做的是这两个括号表达式之一:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
Run Code Online (Sandbox Code Playgroud)
BUT[^和[:有自己的含义。因此,上面的两个命令不起作用。
有没有一种方法可以在一个命令中对这两种情况进行 grep?
我nix在我不是 root 的系统中以“单用户模式”使用(有关我的 nix 设置的描述,请参见下文)。
我想快速运行我的一个二进制文件,它与系统中不存在的库动态链接。
所以,我已经安装了库nix:
$ nix-env -qa 'gmp'
gmp-4.3.2
gmp-5.1.3
$ nix-env -i gmp-5.1.3
Run Code Online (Sandbox Code Playgroud)
但是链接器仍然找不到该库:
$ ldd -r ../valencies
../valencies: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by ../valencies)
../valencies: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ../valencies)
linux-vdso.so.1 => (0x00007fffbbf28000)
/usr/local/lib/libsnoopy.so (0x00007f4dcfbdc000)
libgmp.so.10 => not found
libffi.so.5 => /usr/lib64/libffi.so.5 (0x00007f4dcf9cc000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4dcf748000)
librt.so.1 => /lib64/librt.so.1 (0x00007f4dcf540000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4dcf33c000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4dcf11f000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4dced8b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4dcfde7000)
undefined …Run Code Online (Sandbox Code Playgroud) 我在 OSX 上的 iterm2 中使用 zsh 5.0.8 版本。
我启动计算机并向printenv我显示$PATH变量:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin
Run Code Online (Sandbox Code Playgroud)
根据我的理解,zsh 将按顺序获取以下文件:
/etc/zshenv
~/.zshenv
/etc/zshrc
~/.zshrc
Run Code Online (Sandbox Code Playgroud)
我查了一下,我没有前 3 个文件,我.zshrc的基本上是空的,与 $PATH 变量无关。
那么$PATH变量集在哪里???
我已经PATH=foo设置了/etc/profile
根据/etc/password该root和myaccount用户都/bin/bash作为登录shell。
当我以 身份登录时myaccount,PATH已从 正确设置/etc/profile。如果 I 那么sudo su,PATH不包括在/etc/profile.
如果我sudo su -改为,则/etc/profile来源。我知道无论如何这样做是一种很好的做法,但我不明白为什么有必要使用/etc/profile.
为什么sudo suclobber PATH,无视/etc/profile以及如何使它不?
网络上有太多文章/资源教人们如何设置环境变量,PATH以便他们可以使用java或python等的简写代替命令行界面中的绝对路径。
我想知道的是,当我们输入命令并按回车键时,幕后发生了什么(类似于在浏览器中输入 URL 时发生的情况)。
这是我的猜测:
$@)$PS#,$PROMPT等等)我最想弄清楚的部分是命令查找。很明显,$PATH被一些后台函数消耗掉了,用:/;作为分隔符,那么发生了什么?我们是否使用哈希表(键:文件的基本名称,值:文件的绝对目录名)将二进制文件存储在这些 PATH 或其他一些挂钩下?
注意:我最初认为它是哈希表,因为我可以用它[ -z hash [command] ]来检查当前环境中是否有命令可用,但是当我使用时,hash | grep python我没有从输出中得到任何东西,而which python按预期工作。(我认为该机制可能是特定于 shell 的,但我想更深入地了解它。)