スクリプトがありますが見つかりません。エラー:
#!/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"
ことです。tempfile
debianutils