我有一个脚本,但找不到错误:
#!/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