私は同様のスクリプトを持っています
#!/bin/bash
echo -n "User: "
read -e username
echo -n "Password: "
read -es password
export http_proxy="http://$username:$password@localhost:40080"
export https_proxy="http://$username:$password@localhost:40080"
$@
unset http_proxy
unset https_proxy
ユーザー/パスワードを読み、エージェントをエクスポートし、エージェントが必要なコマンドを実行してからクリーンアップします。効果があるしかし、私はこれを試してみます:
#!/bin/bash
echo -n "User: "
read -e username
echo -n "Password: "
read -es password
export http_proxy="http://$username:$password@localhost:40080"
export https_proxy="http://$username:$password@localhost:40080"
したがって、source proxyscript
毎回ユーザーを入力したり通過したりすることなく、セッション全体でプロキシを使用でき、入力を待つがエクスポートできます。http://:@localhost:40080
もしそうなら、私が何を間違っているか、どのように動作させることができますか?
(引数として渡して$1
/$2
または類似のものを使用できることを知っていますが、記録でパスワードを開く必要がないようにしたいと思います)
編集/解決策:
bash
答えに基づいて、小さな変更だけで互換性がありますzsh
。
#!/bin/bash
echo -n "User: "
read username
echo -n "Password: "
read -s password
export http_proxy="http://$username:$password@localhost:40080"
export https_proxy="http://$username:$password@localhost:40080"
デフォルトではロゴe
のみを削除しました。
答え1
なぜ動作しないのか分かりません。私はうまくいきます。
$ source foo.sh
User: terdon
Password: ~ $ ## I entered the password here, you can add an echo to clear the line
$ echo "$http_proxy"
http://terdon:myPass@localhost:40080
$ echo "$https_proxy"
http://terdon:myPass@localhost:40080
read -p
代わりにを使用しecho
てnullを追加して行を消去しecho
ますが、それ以外の方法は機能するはずです。
#!/bin/bash
read -p "User: " -e username
read -p "Password: " -es password
echo ""
export http_proxy="http://$username:$password@localhost:40080"
export https_proxy="http://$username:$password@localhost:40080"
. foo.sh
今(またはbashを使用しているので)これを行うことができ、期待どおりに動作するはずsource foo.sh
です。
答え2
ZSHはbashではありません。シェルに互換性のないread
組み込み機能があります。bash
:
-e標準入力が端末から来る場合は、readline(上記のREADLINEを参照)を使用して行を取得します。リードラインは現在(または行編集が以前に有効になっていない場合はデフォルト値)の編集設定を使用しますが、リードラインのデフォルトのファイル名補完を使用します。
中山:
-e -E 読み取った入力を標準出力に印刷(エコー)します。 -e フラグを使用すると、入力は引数に割り当てられません。
したがって、read -e
ZSHではbash
いくつかのreadlineエントリがありますが、read -e
ZSHではエコーです。 ZSHを使用してコードをシェルするには、source
ZSH用のソースコードを作成する必要があります。