ユーザー入力を含むソーススクリプト

ユーザー入力を含むソーススクリプト

私は同様のスクリプトを持っています

#!/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 -eZSHではbashいくつかのreadlineエントリがありますが、read -eZSHではエコーです。 ZSHを使用してコードをシェルするには、sourceZSH用のソースコードを作成する必要があります。

関連情報