1つのシェルコマンドだけ別のプロキシを使う
親シェルを変更したり起動ファイルを編集したりせずに一時的な経路を使いたいときは、コマンドの前にプロキシ変数を置きます。
1回のダウンロードだけ別のプロキシを使い、その後はすべて元に戻したいとします。シェルの起動ファイルを編集して、元に戻すのを忘れないように願う必要はありません。
POSIX 系シェルで外部コマンドを使う場合は、代入をコマンドの前に置きます。
https_proxy=http://proxy.example:8080 curl https://example.com/
そのダウンロード用に意図された HTTP エンドポイントを使ってください。HTTP プロキシ一覧は、許可された公開経路の候補を提供します。代入はそのコマンドの環境に渡されます。子プロセスは値を継承できますが、コマンドの終了後に代入が親シェルの既存の値を置き換えることはありません。
読み取るかどうかを決めるのはクライアント側です
シェルの構文は環境を作るだけで、ネットワーク経路を強制するものではありません。アプリケーションが対応している変数名を使ってください。既存のバイパス変数、明示的なコマンドオプション、アプリケーション自身の設定が結果に影響する場合があります。
Bash の環境に関するドキュメントは、コマンド接頭辞の動作を説明しています。シェル関数、特殊な組み込みコマンド、シェル構文であるコマンドには追加のスコープ規則がある場合があるため、上の単純な例は意図的に外部プログラムを使っています。
複数のコマンドにはサブシェルを使う
(
export http_proxy=http://proxy.example:8080
export https_proxy=http://proxy.example:8080
command-one
command-two
)
括弧で囲んだグループは独自のシェル環境で実行されます。例示用のコマンド名は、実際に実行するプログラムに置き換えてください。このパターンなら、古い値を保存し、上書きし、起こりうる失敗のたびに手作業で復元するという脆い手順を避けられます。
シェル履歴にコピーされる例には秘密情報を入れないでください。また、sudo は環境を絞り込むことがあり、外側のコマンドから見える変数が特権の境界を自動的に越えて渡されるわけではありません。一時的なスコープと実際のプロキシ選択は別の問いです。