是否可以通过扫描从控制台读取而不回显字符?

时间:2012-09-20 17:45:52

标签: r passwords

这是一个示例函数:

    passwordEntry <- function() {
            cat("Enter your password: ")
            pwd <- scan(n=1, what=character(), quiet=TRUE)
            invisible(pwd)
    }

并测试功能:

    >   passwordEntry()
    Enter your password: 
    1: test
    > 

有没有办法压制用户输入的内容?或者换一些其他角色?我编写了一个tcl / tk函数来提示用户输入密码,但它在我们的Linux服务器上不起作用。

以下是Paul的链接示例。这在Linux或Windows上都不起作用(后者可能是因为我没有合适的C编译器,所以会研究它。)

getkey3.c

    #include <stdio.h>
    #include <termios.h>
    #include <unistd.h>
    void mygetch ( int *ch ) 
    {
            struct termios oldt, newt;
            tcgetattr ( STDIN_FILENO, &oldt );
            newt = oldt;
            newt.c_lflag &= ~( ICANON | ECHO );
            tcsetattr ( STDIN_FILENO, TCSANOW, &newt );
            *ch = getchar();
            tcsetattr ( STDIN_FILENO, TCSANOW, &oldt );
            return;
    }

我的test.r脚本:

    system('R CMD SHLIB getkey3.c')
    dyn.load("getkey3.so")
    .C("mygetch",as.integer(0))
    dyn.unload("getkey3.so")

我明白了:

    > .C("mygetch",as.integer(0))
    [[1]]
    [1] -1

1 个答案:

答案 0 :(得分:4)

这篇文章介绍了如何阅读单个按键:

Detecting single keystrokes

接受的答案使用一小段C代码返回单独的击键。然后,您可以捕获密码的击键,并且不向用户回送任何内容,也可以是*