标签: path

(G)VIM 使用的 $PATH 与我的系统不同

因为 Ubuntu 没有为 TeXLive 提供最新的软件包,所以我手动安装了它。但是,某些程序需要 TeXLive 作为依赖项。所以我所做的是我从 Ubuntu 存储库中安装了 TeXLive 包,这是 2009 版本。然后我更改了我的 $PATH 以包含手动安装的 2011 版本,因此程序仍然始终指向并使用最新的 TeXLive 版本。到目前为止,这工作正常。

但这里有一个要点:当我切换到 VIM 来编辑我的 LaTeX 文件时,我注意到 VIM 只“看到”了 TeXLive2009,非常头疼!看这个截图,左边是VIM,右边是终端:

VIM 中的 LaTeX 版本

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

VIM 和终端中的路径

维姆:

:! 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?任何帮助将不胜感激!

vim path environment-variables

9
推荐指数
1
解决办法
5363
查看次数

Why Bash unable to find command even if $PATH is specified properly?

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 …

linux shell bash ssh path

9
推荐指数
1
解决办法
3万
查看次数

为 Linux 可执行文件创建命令

我正在使用一个名为 node-webkit 的程序,但是如果不指定可执行文件的完整路径,我将无法启动该程序。有什么方法可以将命令(例如node-webkit)与 Linux 上的可执行文件相关联,以便不需要指定文件的完整路径?

path executable

9
推荐指数
2
解决办法
3万
查看次数

为什么“which”命令会给出重复的结果?

which -a ruby 给我

/usr/ruby
/usr/ruby
/usr/ruby
Run Code Online (Sandbox Code Playgroud)

它给出了三次相同的路径。为什么会发生这种情况?

shell path which

9
推荐指数
1
解决办法
409
查看次数

路径环境变量在 Linux 中是如何工作的?

我很困惑 PATH 环境变量在 Linux 下是如何工作的。我是 Linux Mint 15 用户。

首先,我阅读了有关编辑/home/.bashrc文件和执行.a文件的内容PATH=$PATH:/directory
但我也知道其中管理的一些路径内容/etc/bash.bashrc
,因此/usr/local/bin可以从 shell 的任何位置访问安装在其中的任何软件。

路径变量在Linux下是如何工作的,应该放在哪里?

path environment-variables session

9
推荐指数
1
解决办法
3万
查看次数

在行的开头或中间获取模式的 Grep

我首先要说的是,我认为这个问题没有听起来那么天真。

我需要做的是:检查 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?

path shell-script text-processing

9
推荐指数
4
解决办法
5586
查看次数

如何在运行时使用 nix 安装的库?

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)

path dynamic-linking not-root-user nix altlinux

9
推荐指数
1
解决办法
9272
查看次数

如何知道 $PATH 环境变量设置的原因和位置?

我在 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变量集在哪里???

zsh path

9
推荐指数
1
解决办法
8411
查看次数

/etc/profile 不是为 `sudo su` 提供的

我已经PATH=foo设置了/etc/profile

根据/etc/passwordrootmyaccount用户都/bin/bash作为登录shell。

当我以 身份登录时myaccountPATH已从 正确设置/etc/profile。如果 I 那么sudo suPATH不包括在/etc/profile.

如果我sudo su -改为,则/etc/profile来源。我知道无论如何这样做是一种很好的做法,但我不明白为什么有必要使用/etc/profile.

为什么sudo suclobber PATH,无视/etc/profile以及如何使它不?

bash sudo path

9
推荐指数
1
解决办法
8292
查看次数

$PATH 中的查找在幕后如何工作?

网络上有太多文章/资源教人们如何设置环境变量,PATH以便他们可以使用javapython等的简写代替命令行界面中的绝对路径。

我想知道的是,当我们输入命令并按回车键时,幕后发生什么(类似于在浏览器中输入 URL 时发生的情况)。

这是我的猜测:

  1. 读取命令(解析/预处理标准输入以获得正确的参数$@
  2. 命令查找
  3. 命令执行(程序启动,消耗内存,stdout/stderr 到 shell)
  4. 重新渲染通过相关环境变量(例如仿真器$PS#$PROMPT等等)

我最想弄清楚的部分是命令查找。很明显,$PATH被一些后台函数消耗掉了,用:/;作为分隔符,那么发生了什么?我们是否使用哈希表(键:文件的基本名称,值:文件的绝对目录名)将二进制文件存储在这些 PATH 或其他一些挂钩下?

注意:我最初认为它是哈希表,因为我可以用它[ -z hash [command] ]来检查当前环境中是否有命令可用,但是当我使用时,hash | grep python我没有从输出中得到任何东西,而which python按预期工作。(我认为该机制可能是特定于 shell 的,但我想更深入地了解它。)

shell path

9
推荐指数
1
解决办法
1852
查看次数