〜$ PATH変数のルートフォルダを無視します。

〜$ PATH変数のルートフォルダを無視します。

コンテナでAlpine Linuxを使用しています。ENV PATH="~/.local/bin:$PATH" \私のDockerfileに

シェルにログインすると、正常に同じようにls ~/.local/binターゲットls /root/.local/binバイナリがあります。

しかし、バイナリを直接呼び出しています。それ以外の場合はwhich mybin動作しません。明示的に追加しても/root/.local/bin大丈夫です。

~/.local/binandが/root/.local/bin同じので、なぜこれが起こるのかわかりません。

どんなアイデアがありますか?ありがとうございます!

編集する:

重複したリンクを介して何が起こっているのかについての洞察を得ることができましたが、それが主な理由ではないことがわかりました。 DockerfileENVの指示はシェル拡張を実行しないため、引用符を削除しても機能しません。

動作しているように見える唯一の方法は、ディレクティブでexport &&使用することですCMD

また、指示に$HOME従わないでください。ENV

答え1

$HOMEどのシェルを使用しているかはわかりませんが、bashと仮定すると、インタラクティブなコマンドライン以外の場所では~使用するのが安全ではないことを指定する必要があります。~

スクリプト内の一部の場所~も機能しますが、変数内で定義すると、経験したように予期しない結果が生じる可能性があります。

$PATH内容が何であるかを確認するために再エコーすることもできます。

echo $PATH

~/.local/bin現在の実装では文字通り拡張されず、パスが含まれることがわかります。/root/.local/bin~

関連情報