我有一个我从How do I echo stars (*) when reading password with read?
借来的密码功能我尝试调整它以便我可以运行该函数两次来进行密码确认,然后评估2个密码以确定它们是否匹配,但我似乎缺少一些bash如何在这种情况下工作的基础知识。 / p>
我尝试用PASSWORD
替换$1
,但不断收到command not found
次错误
passWord() {
unset PASSWORD
unset CHARCOUNT
stty -echo
CHARCOUNT=0
while IFS= read -p "$PROMPT" -r -s -n 1 CHAR; do
# Enter - accept password
if [[ $CHAR == $'\0' ]] ; then
break
fi
# Backspace
if [[ $CHAR == $'\177' ]] ; then
if [ $CHARCOUNT -gt 0 ] ; then
CHARCOUNT=$((CHARCOUNT-1))
PROMPT=$'\b \b'
PASSWORD="${PASSWORD%?}"
else
PROMPT=''
fi
else
CHARCOUNT=$((CHARCOUNT+1))
PROMPT='*'
PASSWORD+="$CHAR"
fi
done
stty echo; echo
${1}=${PASSWORD}
}
echo -n "Enter the password > "
passWord passOne
echo -n "Please re-enter the password > "
passWord passTwo
if [[ $passOne == $passTwo ]]; then
PASSWORD=$passOne
else
echo "Passwords did not match, please try again."
fi
更新 这是带有最新更新的脚本
#!/bin/bash
passWord() {
unset password
local prompt char
stty -echo
charcount=0
while IFS= read -p "$prompt" -r -s -n 1 CHAR; do
# Enter - accept password
if [[ $char == $'\0' ]] ; then
break
fi
# Backspace
if [[ $char == $'\177' ]] ; then
if [ $charcount -gt 0 ] ; then
charcount=$((CHARCOUNT-1))
prompt=$'\b \b'
password="${password%?}"
else
prompt=''
fi
else
charcount=$((charcount+1))
prompt='*'
password+="$char"
fi
done
stty echo; echo
}
echo -n "Enter the password > "
passWord
pass1=$password
echo -n "Please re-enter the password > "
passWord
pass2=$password
if [[ "$pass1" == "$pass2" ]]; then
PassWord=$pass1
else
echo "Passwords did not match, please try again."
fi
答案 0 :(得分:2)
您缺少贝壳的声明。
请添加一个shebang作为第一行:
$(".card-link:first").click(function() {
if ($(".card-link:first").text()==='Show comments') {
$("ul.list-group.list-group-flush").show();
$(".card-link:first").text('Hide comments');
} else {
$("ul.list-group.list-group-flush").hide();
$(".card-link:first").text('Show comments');
}
}
变量的分配(行#!/bin/bash
)不起作用
解决它的一种方法(不推荐)是添加eval:
${1}=${PASSWORD}
但由于这会使任何输入成为安全问题,因此您应该使用其他一些行。
一种解决方案是使用declare(bash 4.2 +):
eval "${1}=${PASSWORD}" # don't use quite risky.
declare -g "${1}=${PASSWORD}"
是必需的(自bash 4.2起必需且可用)来更改常规变量(不是函数的本地变量)。
或者使用printf(自bash 3.1起):
-g
除此之外,您应该为函数内部使用的变量添加本地命令,以避免与外部变量冲突,并且应该在循环之前添加printf -v "${1}" '%s' "${PASSWORD}"
以避免在调用函数时打印初始星号第二次。
应该说应该避免在CAPS中使用变量。 CAPS中的变量表示环境变量,其余变量使用小写以避免冲突。