シンプルな bash スクリプトが動作しない

シンプルな bash スクリプトが動作しない

私は bash スクリプトの初心者です。http_proxy 変数をエクスポートするスクリプトを作成しようとしています。ターミナルから実行する操作は次のとおりです。

$export http_proxy=http://proxy21.iitd.ernet.in:3128/
$export https_proxy=https://proxy21.iitd.ernet.in:3128/

これは問題なく動作します。次に、私のスクリプト (setproxy という名前) を示します。

#!/usr/bin/env bash
if [ $1 -eq 22 ]
then
    export http_proxy=http://proxy22.iitd.ernet.in:3128/
    export https_proxy=https://proxy22.iitd.ernet.in:3128/
elif [ $1 -eq 21 ]
then
    export http_proxy=http://proxy21.iitd.ernet.in:3128/
    export https_proxy=https://proxy21.iitd.ernet.in:3128/
elif [ $1 -eq 61 ]
then
    export http_proxy=http://proxy61.iitd.ernet.in:3128/
    export https_proxy=https://proxy61.iitd.ernet.in:3128/
elif [ $1 -eq 62 ]
then
    export http_proxy=http://proxy62.iitd.ernet.in:3128/
    export https_proxy=https://proxy62.iitd.ernet.in:3128/
fi

基本的に、入力に応じて適切なプロキシ サーバーを設定したいのです。bin フォルダーに配置し、実行可能にし、パスに bin を追加し、ログインおよびログアウトしました。ターミナルは setproxy を有効なコマンドとして受け入れます (少なくともコマンドが見つからないというエラーはありません)。しかし、次の操作を行うと、

$setproxy 22

効果はありません。プロキシは変更されません。何が間違っているのでしょうか?

答え1

スクリプトを呼び出すと、新しい子シェルが呼び出されて実行されます。そのプロキシは設定されますが、親プロセス(シェル)のプロキシは子プロセスから変更できません。調達スクリプト、つまり次のように呼びます

. setproxy 21

その後、スクリプトは現在のシェルによって解釈されます。

関連情報