0

我有环境变量export MY_WORK_DIR="~/project"。当我使用下面的命令时,它给了我一个错误:

realpath $MY_WORK_DIR

realpath: '~/project': No such file or directory

在我的猜测中,~使用此环境变量时不会处理 。

顺便说一句,export MY_WORK_DIR=~/project对我来说不是一个选择。~应该在字符串中。

您能否指导我如何从环境变量中获取真实路径~/project

编辑

对不起。该变量来自其他应用程序,因此我无法修改包含波浪号的环境变量。(使用波浪号扩展形式存储变量不是一种选择)。

编辑2

使用这样的命令是否安全evaleval "echo ${MY_WORK_DIR}". 它适用于我的使用。

4

2 回答 2

0

eval如果可以避免,我不会使用它。特别是在你这样做的方式上,这是通过将危险代码嵌入到MY_WORK_DIR.

对于您的具体示例,一个便宜的解决方案是做一个

if [[ ${MY_WORK_DIR:0:1} == '~' ]]
then 
  MY_WORK_DIR="$HOME/${MY_WORK_DIR:1}"
fi

它消除了烦人的~并在您的主目录之前添加。MY_WORK_DIR但是,如果设置为,例如,这将失败~einstein/project

在这种情况下,您必须提取用户名 ( einstein) 并在主目录中搜索该用户。

于 2020-05-13T07:14:51.837 回答
0

以下步骤可以提供解决方案:

  1. 您需要将“~”替换为项目目录的完整路径。
  2. 使用pwd命令识别项目目录的全路径;eg/root/Documents/project是你得到的完整路径。
  3. 执行这个命令export MY_WORK_PROJECT=/root/Documents/project
  4. 执行这个命令echo $MY_WORK_PROJECT,你应该得到这个结果 /root/Documents/project
于 2020-05-13T04:27:01.910 回答