bash - 在bash中读取变量/密码的输入

时间:2015-07-17 10:16:39

标签: bash

是否可以将某些内容(例如用户输入)存储到bash中的变量中?我有一个读取密码的脚本......

#!/bin/bash

while [ $# -gt 0 ]; do
    key="$1";
    case $key in
        -p|--prompt)
            if [ ! "$2" ]; then
                printf "\e31;1mMust pass in a prompt\e[0m\n";
                exit 1;
            fi
            printf "$2";
            shift 2;
            ;;
    esac
done

psswd=;
c=;
while [ "$c" != "^M" ]; do
    read -n 1 -s c;
    if [ "$c" == "^?" ]; then
        if [ ${#psswd} -gt 0 ]; then
            psswd=${psswd:: -1};
            printf "\b \b";
        fi
    elif [ ! "$c" ]; then # pressed enter
        break;
    else
        psswd="$psswd$c";
        printf "*";
    fi
done;

printf "\nYour entered password is: $psswd\n"

(抱歉,^M是换行符,^?是退格。意味着您无法复制和粘贴,但这就是它在vim中的显示方式,我不知道怎么回事写下来。)

...我想将密码加入变量中。您知道read如何存储变量。如果read可以做到,为什么我不能?有没有人有任何想法?

(或许有更好的方法来存储密码......比如echo "$psswd" | base64 > .pass - 这实际上并不是我想做的。)

更新

基本上,如何将psswd放入shell外的变量? OR 关闭shell后如何访问密码?除了变量之外,还有更好的方法来存储它吗?

1 个答案:

答案 0 :(得分:0)

正如rojomoke所说,这就足够了:

read -p "Enter your password: " -s pw
echo "You entered: $pw"

如果您执行此操作:read -n 1 -s c并且只需按 Enter ,则$c将为空,它将不会保留\r;如果你点击退格键,在我的测试中,$ c会保存一个八进制值为177的字符

read -n 1 -s c
printf "%s" "$c" | od -c