Linuxでパスワードボックスを作成するには? [閉鎖]

Linuxでパスワードボックスを作成するには? [閉鎖]

スクリプトがありますが見つかりません。エラー:

#!/bin/bash

data=$(tempfile 2>/dev/null)

trap "rm -f $data" 0 1 2 5 15

dialog --title "Password" \
--clear \
--passwordbox "Enter your password" 10 30 2> $data

ret=$?

case $ret in
 0)
        echo "Password is $(cat $data)";;
 1)
        echo "Cancel pressed.";;
 255)
        [ -s $data ] && cat $data || echo "ESC pressed.";;
esac

しかし、正しく動作しません。

[root@localhost Desktop]# ./getpasswd1.sh 
./getpasswd1.sh: line 7: $data: ambiguous redirect
Cancel pressed.

答え1

一時ファイルに保存したくありません。必ずしも必要ではありませんが、少しクリエイティブなミックスが必要です。

data=$(dialog --passwordbox "Enter your password" 10 30 3>&1- 1>&2- 2>&3-)

それがすることはfd 1と2を変えるだけです(「X>&Y-」構成は「fd Yを動かしてfd Xになる」ことを意味します。はい、混乱しますが、それはすべてです)。これにより、ダイアログボックスが標準エラー(最終的に端末で)に記録され、パスワードは変数で終わります$data

答え2

だからあなたは持っていませんtempfile(結果command not found:)。したがって、変数はdata空の文字列に設定されます。リダイレクトしようとすると、存在しない値にリダイレクトしようdialog ... 2> $dataとします。stderrこれはあいまいです。

オプションは、data=$(tempfile 2>/dev/null)次に変更するか、インストールを介してインストールするdata="/tmp/mytmpfile"ことです。tempfiledebianutils

関連情報