539

パスワードで保護されたシステムにアクセスする必要があるプロセスを自動化するスクリプトがあります。システムには、ユーザーパスワードを引数として受け入れるコマンドラインプログラムを介してアクセスします。

ユーザーにパスワードを入力してシェル変数に割り当て、その変数を使用してアクセスプログラムのコマンドラインを作成するように促します(もちろん、処理するストリーム出力が生成されます)。

私はBourne/Bashでかなり有能なシェルプログラマーですが、ユーザー入力を端末にエコーさせずに(または「*」文字を使用してエコーさせずに)受け入れる方法がわかりません。

誰かがこれを手伝うことができますか?

4

9 に答える 9

771

これを行う別の方法を次に示します。

#!/bin/bash
# Read Password
echo -n Password: 
read -s password
echo
# Run Command
echo $password

read -sエコーをオフにします。echo最後の行の を実行したいコマンドに置き換えるだけです。

于 2010-10-20T18:04:18.337 に答える
281

POSIX準拠の回答。/bin/shの代わりにの使用に注意してください/bin/bash(bashで動作しますが、bashは必要ありません。)

#!/bin/sh
stty -echo
printf "Password: "
read PASSWORD
stty echo
printf "\n"
于 2010-10-20T17:40:11.910 に答える
109

一発ギャグ:

read -s -p "Password: " password

Linux (および cygwin) では、このフォームは bash および sh で機能します。ただし、標準の Unix sh ではない可能性があります。

詳細とオプションについては、bash で「help read」と入力してください。

$ help read
read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
Read a line from the standard input and split it into fields.
  ...
  -p prompt output the string PROMPT without a trailing newline before
            attempting to read
  ...
  -s                do not echo input coming from a terminal
于 2013-07-08T21:42:11.313 に答える
6

echoを使用してオフにしstty、その後再びオンにします。

于 2010-10-20T17:36:18.897 に答える