$PATH 环境变量似乎无法识别

Ber*_*lcı 3 shell zsh path which

我已经全新安装了 Debian Wheezy,并安装了 zsh。几天后,我完成了 TeX Live 2014 的原版安装,因此我将必要的二进制路径添加到了 $PATH 中。现在我开始编写小脚本,所以我想把它们放在容易访问的地方,即~/bin.

我的路径是这样的:

~/bin:/opt/texbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Run Code Online (Sandbox Code Playgroud)

现在,如果我想从 TeX Live 运行一些东西,这很容易:

% which pdflatex
/opt/texbin/pdflatex
Run Code Online (Sandbox Code Playgroud)

没问题。但是当我尝试从~/bin,...

% which hello_world
hello_world not found
Run Code Online (Sandbox Code Playgroud)

所以我仔细检查了一遍:

% ls -l ~/bin
total 18
-rwxr-xr-x 1 bozbalci bozbalci 5382 Sep  8 00:28 hello_world
Run Code Online (Sandbox Code Playgroud)

它表明 hello_world 在~/bin其执行权限设置方面做得很好。我试过了rehash,但没有奏效。帮助?

Gil*_*il' 9

在 shell 命令中

PATH=~/bin:/opt/texbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Run Code Online (Sandbox Code Playgroud)

执行 shell 命令时,波浪号会扩展到您的主目录。因此,的结果值PATH类似于 /home/theconjuring/bin:/opt/texbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

确保波浪号不在引号 ( PATH="~/bin:…") 内,否则它代表自身。要将目录添加到 的当前值PATH,您可以使用

PATH=~/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

通常,在 zsh$PATH以外的shell 中,当值包含空格或其他特殊字符时,外部双引号会中断,但在赋值中,这是安全的。export但是,使用,您需要编写export PATH=~/bin:"$PATH"(尽管您不需要export使用,PATH因为它已经在环境中)。在 zsh 中,除非变量可能为空,否则不需要双引号,但如果设置PATHin .profile,则由/bin/shor处理/bin/bash

如果您正在设置PATH~/.pam_environment,但是,你不能使用~或者$HOME放置你的home目录。这个文件不是由 shell 解析的,它是一个简单的NAME=value行列表。所以你需要完整地写出路径。

  • 使用`zsh`,您还可以使用`path[1,0]=~/bin` 在`$PATH` 前面添加一个元素 (2认同)