我正在构建一个工具,需要输入带有密码的命令。 我希望当我输入带有密码的命令时,命令行将每个字符替换为“*”或“”,因此命令和密码将无法被观察到!
是否有这样一个命令,告诉TCL解释器“从此时开始,将输入的每个字符显示为*”,然后切换回常规模式?
任何其他建议也很有值(value)。
最佳答案
就您而言,您应该“完全控制”您的终端并禁用其默认的回显行为(在 UNIX 中,终端应输入所谓的原始 模式) 然后,您可以逐一读取字符(直到达到最大密码大小或直到按下 Enter 键),并对每个按下的字符回显“*”。 您在 UNIX 和 Windows 上都获得了有效的代码示例,如何做到这一点 here 您可能还想阅读此链接 echo-free password entry TCL wiki
proc enableRaw {{channel stdin}} {
exec /bin/stty raw -echo <@$channel
}
proc disableRaw {{channel stdin}} {
exec /bin/stty -raw echo <@$channel
}
enableRaw
set c [read stdin 1]
puts -nonewline $c
disableRaw
package require twapi
proc enableRaw {{channel stdin}} {
set console_handle [twapi::GetStdHandle -10]
set oldmode [twapi::GetConsoleMode $console_handle]
set newmode [expr {$oldmode & ~6}] ;# Turn off the echo and line-editing bits
twapi::SetConsoleMode $console_handle $newmode
}
proc disableRaw {{channel stdin}} {
set console_handle [twapi::GetStdHandle -10]
set oldmode [twapi::GetConsoleMode $console_handle]
set newmode [expr {$oldmode | 6}] ;# Turn on the echo and line-editing bits
twapi::SetConsoleMode $console_handle $newmode
}
enableRaw
set c [read stdin 1]
puts -nonewline $c
disableRaw
关于c++ - 使用TCL命令行,有没有办法停止显示字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27291233/