从 rc.local 执行时的 Whiptail/dialog 输入错误

从 rc.local 执行时的 Whiptail/dialog 输入错误

我需要在 Debian 启动时启动一个包含对话框调用的 Bash 脚本。这就是我能够做到的:

  • 取消设置默认root密码
  • - 自动登录tty1 中的选项初始化程序(1:2345:respawn:/sbin/getty --自动登录 root tty1
  • 将我的脚本的完整路径写入/etc/rc.local

但是,对话框有一个不寻常的行为:出现该框,但标准输入似乎溢出了标准输出。当我按下箭头键时,没有选择任何按钮,而是在对话框顶部显示相应的 ASCII 字符,从默认选择位置开始:

在对话框中显示错误

请注意,如果我然后按 Enter,按键将发送到对话框,并按预期选择相应的选项。该脚本已测试正常执行时是否有效。

我想 shell 初始化中缺少一些东西:如果我输入/bin/bashrc.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

警告:我不是普利茅斯专家,也没有尝试过上述方法。

相关内容