The*_*Guy 3 io-redirection shell-script dialog
我想使用对话框包创建一个密码框。
#!/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
Run Code Online (Sandbox Code Playgroud)
但是,当我执行它时出现此错误:
line 4: $data: ambiguous redirect
Run Code Online (Sandbox Code Playgroud)
怎么了?
“模糊重定向”涉及片段2>$data
。这表明变量的值data
没有扩展到一个词。
鉴于您设置它的方式,很可能data
是因为tempfile
命令失败而导致的值为空。由于某种原因,您隐藏了tempfile
. 删除重定向:
data=$(tempfile)
Run Code Online (Sandbox Code Playgroud)
该tempfile
实用程序是一个 Debian 实用程序,您在 Debian 和衍生产品(如 Ubuntu 和 Linux Mint)之外找不到它。您很可能在没有此实用程序的系统上运行此脚本。您可以改用类似的实用程序mktemp
,该实用程序广泛可用。
data=$(mktemp)
Run Code Online (Sandbox Code Playgroud)
此外,鉴于您正在存储机密数据,您需要确保临时文件不可读。
data=$(umask 077; mktemp)
Run Code Online (Sandbox Code Playgroud)
话虽如此,创建临时文件比必要的要复杂。相反,指示dialog
将数据打印到其标准输出,并使用命令替换。
#!/bin/bash
password=$(dialog --title "Password" \
--clear \
--passwordbox "Enter your password" 10 30 \
--stdout)
ret=$?
…
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15581 次 |
最近记录: |