これが私が現在やってread
いることで、うまく機能します。でも短縮したいです。
echo "Please save your DB root password:" && read -s dbrp
echo "Please save your DB user password:" && read -s dbup
これは私がそれを短縮しようとしましたが、完全に失敗した方法です(ヒントは私にとって重要です):
echo "Please save your DB passwords (root, then non-root):" && read -s dbrp && echo "\n" && read -s dbup
すでに私が望む方法でソートされていますが、次の理由で心が楽ではありません。
read -s
1つではなく2つのコマンドがあります。echo /n
分割行なしで中断するには、中断行を使用する必要があります。
これを改善する方法はありますか?
修正する
私はそこを使って間違いを犯しましたecho
(addに加えて\n
。read
独自のプロンプトを追加するオプションもあります:
read -sp "What's your DB root password?" dbrp
read -sp "What's your DB user password?" dbup
答え1
変数名を変更してコードを bash 専用にしたい場合(および-s
で使用可能; プロンプトのみ in のようなものを使用)、次はエレガントで簡単だと思います。zsh
bash
-p
bash
zsh
read 'var?prompt'
ksh
for arg in root user; do
IFS= read -rsp "Please enter your $arg password: " "dbr_$arg"
echo
done
結果$dbr_user
には、sum変数にパスワードを含める必要があります$dbr_root
。
気づくユーザーがパスワードにバックスラッシュ、先行/末尾のスペースまたはタブを含めるように要求して-r
許可します。IFS=
。
同等zsh
:
for arg (root user) IFS= read -rs "dbr_$arg?Please enter your $arg password: "