我想输入密码,但我希望用户能够输入它,就像其他实用程序处理它一样,即字符不会出现在屏幕上。我尝试对此进行搜索,但没有找到确切的答案。
我需要接受一个变量,然后将输入与来自脚本开头的配置文件之一的预定义独立密码硬编码变量进行匹配。
预期行为
$./startScript
username: mtk
password: ********
*
显示为占位符。我需要这部分是不可见的。目前,密码会在用户键入时显示。
这个怎么做?
答案1
如果您使用sh
(或),则与选项(secure)一起bash
使用。read
-s
read -s pass
将从用户读取密码,而不将其显示到输出并将其存储到变量中pass
。
答案2
UNIX 具有“getpass”C 函数来显示提示并在禁用回显的情况下读取密码。
该函数获取提示字符串并返回一个指向包含密码的以 NULL 结尾的字符串的指针。不要忘记最大密码长度(查看系统上的 limit.h 中的 PASS_MAX 左右)。
另请注意,“getpass”将密码放入内部静态缓冲区中,每次调用它时该缓冲区都会被删除。因此,正确的过程应该尽快将缓冲区清零。
这是一个小程序,显示了行为:
#include <stdio.h>
#include <unistd.h>
int
main( int argc, char** argv ) {
char* password = getpass( "Password: " );
printf( "Your password is: '%s'\n", password );
return 0;
}
答案3
我认为这段代码应该做你想要的:
#!/bin/bash
unset username
unset password
echo -n "username:"
read username
prompt="password:"
while IFS= read -p "$prompt" -r -s -n 1 char
do
if [[ $char == $'\0' ]]
then
break
fi
prompt='*'
password+="$char"
done