Linux

為什麼我不能在 chmod 命令中使用環境變數?

  • November 12, 2021

我不能在 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"

兩者都會起作用。

引用自:https://unix.stackexchange.com/questions/677153