带有波形符号的 Unix 环境路径变量



在我的 Ubuntu 16.04.4 LTS 上,xenial,我想声明环境变量,其中包含我的~/.virtualenvs文件夹的路径。

我想要什么

拥有一个系统范围的环境字符串变量,我可以在我的 unix 命令(例如cd $MYVAR或类似的优雅用法(中使用它。

我尝试过:

我将以下行添加到/etc/environment文件中,然后重新启动服务器:

$PATH_VENV="~/.virtualenvs"

问题:

当我尝试在 unix 命令中使用我新声明的变量时,这是一个输出:

cd ${PATH_VENV}
-bash: cd: ~/.virtualenvs: No such file or directory

我认为 UNIX 从字面上将~/.virtualenvs解释为文件夹的名称,而不是将~解释为主文件夹。如何解决这个问题?有什么解决方法吗?

Wierd 提示:

我像下面这样检查了我的$PATH_VENV变量,发现还有一个额外的换行符,但是我不知道为什么:

echo $PATH_VENV | od -a
0000000   ~   /   .   v   i   r   t   u   a   l   e   n   v   s  nl
0000017

首先,你的/etc/environment文件不应该在 var 名称之前包含美元符号。其次,像 bash 这样的 POSIX 1003 shell 在参数展开之前执行波浪号扩展。如果键入man bash请阅读名为EXPANSION的部分。问题是/etc/environment是由不执行波浪号扩展的 pam_env 模块读取的(至少在 Linux 上(。如果您运行env | grep PATH_VENV您将看到波浪号尚未替换为您的主目录。由于 POSIX 1003 shell 在变量展开之前执行波浪号扩展,因此您最终会执行等效的cd '~/.virtualenvs'(请注意路径周围的引号(。

答案是不在/etc/环境中设置这个变量。将其设置在您的~/.profile~/.bashrc中。

附言,"附加换行符"是因为您使用了echo默认情况下,它会在它回显的字符串后附加一个换行符。

P.P.S.,你所说的"波浪"符号通常被称为"波浪号"字符。

最新更新