13

You know there is a built-in Bash command called read. What if I want to do this in my scripts:

read PASSWROD

When it prompts me to input, all my input is visible. Is there an alternative command that can make the input invisible.

4

4 に答える 4

30

手動で bash する方法を学ぶ時間です (bashマニュアルでは、つまり、これは Bash 4.1 版のものです)。関連するオプションは-s.

読んだ

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt]

[-t timeout] [-u fd] [name ...]

標準入力、またはオプションの引数として指定されたファイル記述子 fd から 1 行が読み取られ、-u最初の単語が最初の名前に、2 番目の単語が 2 番目の名前に、というように、残りの単語と姓に割り当てられたその間のセパレータ。入力ストリームから読み取られる単語が名前よりも少ない場合、残りの名前には空の値が割り当てられます。IFS 変数の値の文字は、行を単語に分割するために使用されます。バックスラッシュ文字\次の文字読み取りと行継続の特別な意味を削除するために使用できます。名前が指定されていない場合、読み取られた行は変数 REPLY に割り当てられます。戻りコードはゼロです。ただし、ファイルの終わりに達した場合、読み取りがタイムアウトになった場合 (戻りコードが 128 より大きい場合)、または無効なファイル記述子が の引数として指定された場合を除きます-u

オプションが指定されている場合、次の意味があります。

-a anameワードは、0 から始まる配列変数 aname の連続インデックスに割り当てられます。すべての要素は、割り当ての前に aname から削除されます。他の名前引数は無視されます。

-d delimdelim の最初の文字は、改行ではなく、入力行を終了するために使用されます。

-ereadline (Chapter 8 [Command Line Editing], page 93 を参照) を使用して行を取得します。readline は、現在の (行編集が以前にアクティブでなかった場合はデフォルトの) 編集設定を使用します。

-i text行を読み取るために Readline が使用されている場合、テキストは編集が始まる前に編集バッファーに置かれます。

-n ncharsread は、入力行全体を待つのではなく、nchars 文字を読み取った後に戻りますが、区切り文字の前に nchars 文字よりも少ない文字が読み取られた場合は、区切り文字を尊重します。

-N ncharsread は、EOF に遭遇するか読み取りがタイムアウトしない限り、完全な入力行を待つのではなく、正確に nchars 文字を読み取った後に戻ります。入力で検出された区切り文字は特別に扱われず、 nchars 文字が読み取られるまで read は戻りません。

-p prompt入力を読み取ろうとする前に、末尾に改行を付けずにプロンプ​​トを表示します。プロンプトは、入力が端末からのものである場合にのみ表示されます。

-rこのオプションを指定すると、バックスラッシュはエスケープ文字として機能しません。バックスラッシュは行の一部と見なされます。特に、バックスラッシュと改行のペアは、行の継続として使用できません。

-sサイレントモード。入力が端末からのものである場合、文字はエコーされません。

-t timeout 入力の完全な行がタイムアウト秒以内に読み取られない場合、読み取りがタイムアウトになり、失敗が返されます。timeout は、小数点の後に小数部がある 10 進数の場合があります。このオプションは、 read が端末、パイプ、またはその他の特殊ファイルから入力を読み取っている場合にのみ有効です。通常のファイルから読み取る場合は効果がありません。タイムアウトが 0 の場合、read は、指定されたファイル記述子で入力が利用できる場合は成功を返し、それ以外の場合は失敗を返します。タイムアウトを超えると、終了ステータスは 128 を超えます。

-u fdファイル記述子 fd から入力を読み取ります。


したがって、タイプミスを修正すると、次のものが必要になります。

read -s -p "Password: " PASSWORD

echo改行もエコーされないため、その直後に追加することをお勧めします (ただし、パスワードには含まれません)。

于 2012-11-02T19:57:44.237 に答える
9

次の数行を使用できます。

stty -echo
read -p "Password: " passw; echo
stty echo

これはecho、パスワード読み取りの間にオンとオフを切り替えます。

于 2012-11-02T19:55:06.100 に答える
2

端末設定を使用してエコーをオフにすることができます。

#!/bin/bash
# Disable echo
stty -echo

#Prompt and read password
printf "Password: "
read PASSWORD

# Turn echo back on
stty echo
printf "\n"
于 2012-11-02T19:55:00.070 に答える