如何在 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

相关内容