bash - 如何使用****在命令行中隐藏密码并将值获取到.bat文件和.sh文件中

标签 bash batch-file cmd command-prompt

<分区>

我从命令行获取用户输入的 .bat 文件命令是

set /p weblogicpassword=Enter weblogic password:%=%

我从 bash 脚本获取用户输入的 .sh 文件命令是

echo -n "Enter weblogic password: "
read weblogicpassword

现在当我们输入一些密码值时,这些值在命令行中可见。 我们如何从命令行获取密码值,这对于像 **

这样的用户来说应该是不可见的

最佳答案

通过使用 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 脚本中,我们可以使用以下代码实现这一点。

#!/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 : 要输入的字符数。

除非遇到\0,否则 read 返回 0,并将用户键入的字符放入 char 变量中。

IFS= 部分清除 IFS 变量,这确保您键入的任何空格或制表符都包含在密码中,而不是被读取解析出来。

关于bash - 如何使用****在命令行中隐藏密码并将值获取到.bat文件和.sh文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19950620/

相关文章:

windows - 如何在 Windows 的变量中获取命令的结果?

batch-file - 为什么在运行时将空格插入此批处理文件?

用于常规 Windows 命令行 (cmd.exe) 的 Powershell 的 $profile 模拟

batch-file - PuTTY/PSFTP 文件传输自动化的批处理文件

batch-file - 如何在批处理文件中设置变量的动态文件夹路径?

linux - 无法让我的程序运行 - %GC 计算器

linux - Bash 识别具有所有权限的文件

linux - 监视多个目录以创建文件;如果它们不存在,请发送电子邮件

bash - 5秒后按任意键中止

powershell - 调用powershell函数的批处理脚本