Bash - 在环境变量中解析 ~ 时出错
Bash - Error parsing ~ in environment variable
我有环境变量export MY_WORK_DIR="~/project"
。
当我使用下面的命令时,它给我一个错误:
realpath $MY_WORK_DIR
realpath: '~/project': No such file or directory
据我猜测,使用此环境变量时未处理 ~
。
顺便说一句,export MY_WORK_DIR=~/project
不是我的选择。 ~
应该在字符串中。
能否指导我如何从环境变量中获取真实路径 ~/project
?
编辑
对不起。该变量来自其他应用程序,因此我无法修改包含波浪号的环境变量。 (不能选择使用波浪线扩展形式存储变量)。
编辑2
这样使用 eval
命令安全吗? eval "echo ${MY_WORK_DIR}"
。它适合我使用。
以下步骤可以提供解决方案:
- 您需要将“~”替换为项目目录的完整路径。
- 使用
pwd
命令识别项目目录的完整路径;例如/root/Documents/project
是你得到的完整路径。
- 执行这条命令
export MY_WORK_PROJECT=/root/Documents/project
- 执行这个命令
echo $MY_WORK_PROJECT
所以你应该得到这个结果
/root/Documents/project
如果可以避免,我不会使用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
) 并搜索该用户的主目录。
我有环境变量export MY_WORK_DIR="~/project"
。
当我使用下面的命令时,它给我一个错误:
realpath $MY_WORK_DIR
realpath: '~/project': No such file or directory
据我猜测,使用此环境变量时未处理 ~
。
顺便说一句,export MY_WORK_DIR=~/project
不是我的选择。 ~
应该在字符串中。
能否指导我如何从环境变量中获取真实路径 ~/project
?
编辑
对不起。该变量来自其他应用程序,因此我无法修改包含波浪号的环境变量。 (不能选择使用波浪线扩展形式存储变量)。
编辑2
这样使用 eval
命令安全吗? eval "echo ${MY_WORK_DIR}"
。它适合我使用。
以下步骤可以提供解决方案:
- 您需要将“~”替换为项目目录的完整路径。
- 使用
pwd
命令识别项目目录的完整路径;例如/root/Documents/project
是你得到的完整路径。 - 执行这条命令
export MY_WORK_PROJECT=/root/Documents/project
- 执行这个命令
echo $MY_WORK_PROJECT
所以你应该得到这个结果/root/Documents/project
如果可以避免,我不会使用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
) 并搜索该用户的主目录。