![chmodコマンドで環境変数を使用できないのはなぜですか? [コピー]](https://linux33.com/image/198286/chmod%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
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
ホームディレクトリの指定など)を使用するか、引用符を削除してください。 (一部のシェルとの互換性が損なわれるのでお勧めできません)
したがって、次の手順を実行します。 エクスポート PEM_FILE="$HOME/.ssh/xxx.pem" またはエクスポート 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"
どちらも機能します。