cd ${DIR_PATH} 返回“没有这样的文件或目录”

amp*_*ent 7 cd-command environment-variables

操作系统 = MacOS 10.8.5/ Darwin Kernel Version 12.5.0

在我的.bash_profile我有:

export DIR_PATH=~/concrete/path
Run Code Online (Sandbox Code Playgroud)

在终端

>echo ${DIR_PATH}
~/concrete/path
Run Code Online (Sandbox Code Playgroud)

也显式 cd 作品:

>cd ~/concrete/path
>pwd
/Users/myuserid/concrete/path
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时

>cd ${DIR_PATH}
-bash: cd: ~/concrete/path: No such file or directory
Run Code Online (Sandbox Code Playgroud)

问题是什么?

cof*_*Mug 9

而不是将 ~ 作为您在 .bash_profile 中的家,而是提供绝对路径:

export DIR_PATH=/Users/myuserid/concrete/path
Run Code Online (Sandbox Code Playgroud)

问题是您的 bash 无法替代~您的 bash 配置文件中的主目录。

  • 我很惊讶这有效。据我所知,bash * 将 * 用你的主目录路径替换 `~`,无论它是否在 `.bash_profile` 中。我可以想象在`=` 之后扩展不会立即起作用,但是对 bash 3.2.25 和 4.2.37 的实验表明 * 确实 * 有效。当你使用 `$HOME` 而不是 `~` 会发生什么?如果这有效,那将是一个更好的解决方案。 (2认同)

slm*_*slm 7

作为使用波浪号~或使用硬路径的替代方法,/Users/myuserid/...我建议改用环境变量$HOME。在大多数 Unix 中,诸如此类的变量通常由login(参见man login)设置,我怀疑 OSX 也会这样做。

摘抄

这应该允许系统管理员登录,即使在网络出现问题的情况下。对于值 $HOME$USER$SHELL$PATH$LOGNAME,并$MAIL根据在密码输入相应的字段设置。 $PATH默认/usr/local/bin:/bin:/usr/bin为普通用户,/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin如果没有其他配置则为 root。

与往常一样,您也可以使用该命令env查看您可以使用的变量。

参考