我无法通过 chmod 命令使用环境变量。有什么解决方法可以运行这个吗?
我尝试在 sh 文件中运行的方式
export PEM_FILE="~/.ssh/xxx.pem"
chmod 400 $PEM_FILE
## Output
chmod: ~/.ssh/xxx.pem: No such file or directory
然而,如果没有像这样的变量,它工作得很好:chmod 400 ~/.ssh/xxx.pem
PS:我用的是macOS。请告诉我这在 Windows 或 Linux 中是否可以正常工作。
谢谢!
答案1
不幸的是,像这样的特殊字符~
在字符串中不起作用。相反,使用变量(如$HOME
指向主目录)或删除引号。 (不推荐,因为它破坏了与某些 shell 的兼容性)
所以你会这样做:export PEM_FILE=“$HOME/.ssh/xxx.pem”或export PEM_FILE=~/.ssh/xxx.pem。
答案2
问题是 ~ 是通配符,bash 通常会在执行命令之前扩展所有通配符并执行变量扩展。但就你而言,你正在使用配额,这会阻止 bash 进行通配符解析,所以
导出 PEM_FILE="~/.ssh/xxx.pem"
PEM_FILE 将不包含文件的路径,而是包含字符串。 chmod 命令将接收该字符串作为参数,再次不执行解析通配符。
所以只需删除配额即可
export PEM_FILE=~/.ssh/xxx.pem
或使用完整路径
export PEM_FILE="/home/username/.ssh/xxx.pem"
两者都会起作用。