Ответ 1
Для bash его read -s
.
-s Silent mode. If input is coming from a terminal, characters are not echoed.
Для партии это кажется более сложным.
Читайте об этом здесь: Могу ли я маскировать входной текст в файле летучей мыши
Моя команда .bat для получения пользовательского ввода из командной строки
set /p weblogicpassword=Enter weblogic password:%=%
Моя команда .sh для получения пользовательского ввода из bash script
echo -n "Enter weblogic password: "
read weblogicpassword
Теперь, когда мы вводим несколько значений для пароля, эти значения отображаются в командной строке. Как мы можем получить значения пароля из командной строки, которые должны быть невидимыми для пользователей, таких как **
Для bash его read -s
.
-s Silent mode. If input is coming from a terminal, characters are not echoed.
Для партии это кажется более сложным.
Читайте об этом здесь: Могу ли я маскировать входной текст в файле летучей мыши
Используя powershell, мы можем достичь этого в 32, а также в 64 бит.
@ECHO OFF
set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
echo %password%
Используя это, мы можем получить пароль с *** в командной строке
В bash script мы можем добиться этого, используя приведенный ниже код.
#!/bin/bash
prompt="Enter Password:"
while IFS= read -p "$prompt" -r -s -n 1 char
do
if [[ $char == $'\0' ]]; then
break
fi
if [[ $char == $'\177' ]]; then
prompt=$'\b \b'
password="${password%?}"
else
prompt='*'
password+="$char"
fi
done
echo " "
echo "Done. Password=$password"
Параметры команды чтения: -p: строка запроса. -r: Не используйте обратную косую черту как символ эвакуации. -s: Тихий режим, входы не отражены. -n 1: количество символов для ввода.
read возвращает 0, если не встречается \0, а символ, который пользователь вводит, помещается в переменную char.
IFS = part очищает переменную IFS, которая гарантирует, что любые пробелы или символы табуляции, которые вы вводите, включаются в пароль, а не анализируются путем чтения.
Вот решение для Windows 32 бит.
@echo off
echo hP1X500P[PZBBBfh#b##[email protected]`$fPf]f3/f1/5++u5>%temp%\ftp.com
set /p password=What is your password? <nul
for /f "tokens=*" %%i in ('%temp%\ftp.com') do set "password=%%i"
del %temp%\ftp.com
echo password is "%password%"
pause
Я прочитал все ответы, и я исправил их.
Этот код запрашивает у пользователя пароль. Вы можете изменить пароль в if "%password%"=="SuperUser"
.
Он проверяет ввод, и если ввод действителен (SuperUser), он переходит к метке 1
.
:1
echo True
cls
exit
rem Or false goto 2
:2
echo False
cls
exit
Вот код:
@echo off
set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
if "%password%"=="" goto 2
if "%password%"=="SuperUser" goto 1
:Again
set "psCommand=powershell -Command "$pword = read-host 'Wrong Password?. Try Again' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
if "%password%"=="" goto 2
if "%password%"=="SuperUser" goto 1
:2
goto Again
:1
echo Valid password
pause>nul