![从 rc.local 执行时的 Whiptail/dialog 输入错误](https://linux22.com/image/64087/%E4%BB%8E%20rc.local%20%E6%89%A7%E8%A1%8C%E6%97%B6%E7%9A%84%20Whiptail%2Fdialog%20%E8%BE%93%E5%85%A5%E9%94%99%E8%AF%AF.png)
我需要在 Debian 启动时启动一个包含对话框调用的 Bash 脚本。这就是我能够做到的:
- 取消设置默认root密码
- 放- 自动登录tty1 中的选项初始化程序(1:2345:respawn:/sbin/getty --自动登录 root tty1)
- 将我的脚本的完整路径写入/etc/rc.local
但是,对话框有一个不寻常的行为:出现该框,但标准输入似乎溢出了标准输出。当我按下箭头键时,没有选择任何按钮,而是在对话框顶部显示相应的 ASCII 字符,从默认选择位置开始:
请注意,如果我然后按 Enter,按键将发送到对话框,并按预期选择相应的选项。该脚本已测试正常执行时是否有效。
我想 shell 初始化中缺少一些东西:如果我输入/bin/bash
,rc.local
我会收到no job control in this shell
消息,并且无法向进程发送信号,也无法获取 pid(我在 中得到问号而不是 pid top
)。
为什么会出现这种行为?我该如何克服它?
答案1
似乎从 rc.local 启动的任何交互式脚本都会与 stdin 出现类似的问题。我找到了解决方法在超级用户上:
只需使用启动您的脚本
openvt -s -w /path/to/script.sh
(解释见原帖)
答案2
控制台未连接到stdin
进程whiptail
。
它看起来与中看到的问题相同带有 read 的 rc.local 不会回显击键。
plymouth quit
建议的答案是在尝试控制台输入之前添加。
或者,也可以安排普利茅斯自己显示您的警告;就像是
plymouth pause-progress
plymouth message --text="Your system will be hosed. Is that what you want? What you really, really want? [yn]"
plymouth watch-keystroke --keys="YyNn " --command="tee /tmp/key_pressed"
case $(cat /tmp/key_pressed) in
[nN])
poweroff; # abort!
;;
esac
plymouth message --text="Okay, you asked for this"
plymouth unpause-progress
警告:我不是普利茅斯专家,也没有尝试过上述方法。