我只是注意到,无论将哪些cryptsetup
FD 转发给/dev/null
它,它仍然会显示输入密码的提示。例如这仍然显示提示:
cryptsetyp luksOpen /dev/sdXY name >/dev/null 2>/dev/null
如何在无法使用标准重定向重定向到文件的终端消息中显示?
我想在 bash 脚本中获得这样的功能,因为我使用 stdout 将结果返回给母脚本,但我仍然想显示交互式提示 - 是否可以使用 bash 这样做?
如果您使用strace
它,您可能会看到它/dev/tty
直接使用。
...
open("/dev/tty", O_RDWR) = 6
ioctl(6, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(6, "Enter passphrase for .......: ", 30) = 30
ioctl(6, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost isig icanon -echo ...}) = 0
...
Run Code Online (Sandbox Code Playgroud)
在源代码 ( utils_crypt.c
) 中:
static int interactive_pass(const char *prompt, char *pass, size_t maxlen,
long timeout)
{
[...]
/* Read and write to /dev/tty if available */
infd = open("/dev/tty", O_RDWR);
if (infd == -1) {
infd = STDIN_FILENO;
outfd = STDERR_FILENO;
} else
outfd = infd;
if (tcgetattr(infd, &orig))
goto out_err;
Run Code Online (Sandbox Code Playgroud)
所以它/dev/tty
通过打开它来测试,如果有效,它就会使用它。如果失败,它会回退到常规标准输入、标准输出,然后您将不再看到提示。
至于/dev/tty
,它是进程的终端,更多细节参见man 4 tty
。
归档时间: |
|
查看次数: |
695 次 |
最近记录: |