首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bash脚本错误stty:标准输入:不适合设备的ioctl

bash脚本错误stty:标准输入:不适合设备的ioctl
EN

Unix & Linux用户
提问于 2013-07-11 15:59:55
回答 2查看 107.7K关注 0票数 21

我在此使用bash脚本中的文档来自动安装和设置需要多次密码的地方。我输入一次密码,脚本将其传递给各个命令。在大多数情况下,这里文档方法处理这一点。但是,在一种情况下,我得到了这个错误:

代码语言:javascript
运行
复制
Enter VNC password: stty: standard input: Inappropriate ioctl for device
Verify password:    
stty: standard input: Inappropriate ioctl for device

请注意,此错误消息来自x11vnc -storepassword (而不是sudo)。

我的问题与x11vnc -storepasswd有关,下面是我的代码:

代码语言:javascript
运行
复制
sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC

显然(从错误中)不起作用。我希望有一个如何在脚本中实现sudo x11vnc -storepasswd ~/.vnc/passwd的工作示例。

如果有帮助,提示如下:

输入VNC密码: 验证密码:写密码到/home/user/.vnc/passwd?是/n n

使用expect会是一个更好的解决方案吗?如果是这样的话,我将如何在这种情况下使用它?(我以前从未使用过expect,但自从发布这个问题以来,我已经看过很多例子,我无法让expect自己工作。)

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2013-07-11 22:59:23

x11vnc期望它的标准输入是一个终端,它改变终端模式以避免在键入时回显密码。当标准输入不是终端时,stty调用关闭并恢复回显失败,从而产生警告。

期望确实是一种解决办法。尝试这个脚本(未经测试):

代码语言:javascript
运行
复制
#!/usr/bin/expect -f
spawn x11vnc -storepasswd ~/.vnc/passwd
expect "password:" {send "swordfish" "\r"}
expect "password:" {send "swordfish" "\r"}
expect "Write*\?" {send "y\r"}

或者,如果可以,可以使用RFB以外的身份验证方法(-passwdfile,或SSL客户端证书)。

票数 5
EN

Unix & Linux用户

发布于 2014-02-03 19:18:56

避免这些警告消息的另一个选项是在由UNIX命令创建的伪终端中执行x11vnc (参见使用伪终端(pty)控制交互程序)。这可以使用script命令或诸如pdip (“与交互程序的编程对话”)等工具来完成。

MacOSX10.6.8上未为x11vnc提供伪终端的警告消息:

代码语言:javascript
运行
复制
# x11vnc 0.9.14
sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC

# Enter VNC password: stty: stdin isn't a terminal
#
# Verify password:    
# stty: stdin isn't a terminal
# Write password to ~/.vnc/passwd?  [y]/n Password written to: ~/.vnc/passwd

使用script命令的解决方案:

代码语言:javascript
运行
复制
# GNU script command
sudo script -q -c 'x11vnc -storepasswd ~/.vnc/passwd' <<ENDDOC /dev/null
password
password
y
ENDDOC

# ... or ...
printf '%s\n' 'password' 'password' 'y' | 
   sudo script -q -c 'x11vnc -storepasswd ~/.vnc/passwd' /dev/null


# FreeBSD script command
sudo script -q /dev/null x11vnc -storepasswd ~/.vnc/passwd <<ENDDOC
password
password
y
ENDDOC
票数 7
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/82658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档