Linux
為什麼我不能在 chmod 命令中使用環境變數?
我不能在 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 中是否可以正常工作。
謝謝!
這是一個字元
~
不能在變數中工作的問題。使用完整/相對路徑效果很好。所以:(export FILE="/home/user1/file"
或 macOS 變體)。那應該很好用!
問題是 ~ 是萬用字元,bash 通常會擴展所有萬用字元並在執行命令之前執行變數擴展。但是在您的情況下,您使用的是配額,這會阻止 bash 進行萬用字元解析,所以
導出 PEM_FILE="~/.ssh/xxx.pem"
PEM_FILE 將不包含文件的路徑,而是包含字元串。並且 chmod 命令將接收此字元串作為參數,再次不執行萬用字元解析。
所以只需刪除配額
export PEM_FILE=~/.ssh/xxx.pem
或使用完整路徑
export PEM_FILE="/home/username/.ssh/xxx.pem"
兩者都會起作用。