chmodコマンドで環境変数を使用できないのはなぜですか? [コピー]

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で正しく機能するかどうかを教えてください。

ありがとうございます!

答え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"

どちらも機能します。

関連情報