如何在shell脚本中输入“密码”之类的?

mtk*_*mtk 19 password shell-script user-input

可能的重复:
如何隐藏在 Linux shell 中键入的命令?
在 Bash 脚本中读取密码而不显示在屏幕上

我想将密码作为输入,但我希望用户能够像其他实用程序处理它一样输入它,即字符不会出现在屏幕上。我试着搜索这个,但没有找到确切的答案。

我需要接收一个变量,然后我会将输入与来自脚本开头的配置文件之一的预定义独立密码硬编码变量相匹配。

预期行为

$./startScript
username: mtk
password: ********
Run Code Online (Sandbox Code Playgroud)

*显示为占位符。我需要这部分不可见。当前,密码在用户键入时显示。

这该怎么做?

小智 30

如果使用sh(或bash),则使用readwith 选项-s(secure)。

read -s pass
Run Code Online (Sandbox Code Playgroud)

将从用户读取密码,而不是将其显示在输出中并将其存储到变量中pass


小智 5

UNIX 有“getpass”C 函数来显示提示并在禁用回显的情况下读取密码。

该函数获取提示字符串并返回一个指向包含密码的以 NULL 结尾的字符串的指针。不要忘记最大密码长度(查看系统上的limits.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;
}
Run Code Online (Sandbox Code Playgroud)


pra*_*tri 5

我认为这段代码应该做你想做的:

#!/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
Run Code Online (Sandbox Code Playgroud)