基于 Ubuntu core 12.04,我准备了一张可启动 DVD。启动后(仅启动到控制台),我可以以用户身份登录并启动用于安装嵌入式设备的脚本:
sudo install_script
为了在启动时执行该脚本,我/etc/rc.local
在 DVD 上的根文件系统映像中添加了以下内容:
/bin/bash -ic install_script
由于此脚本是无条件执行的,因此我想为用户提供一些机会来绕过安装并进入登录提示。为此,我想read
在 install_script 中使用。不幸的是,从 运行时,该脚本不会对键盘输入做出反应/etc/rc.local
。(登录后从 shell 启动相同的脚本没有问题)。
如何在启动时获取一些用户输入?
(一些想法:
- 也许我可以以某种方式检测并连接 tty
read
或脚本?我试过了,但/bin/bash -ic install_script </dev/console
无济于事。 - 也许,有更合适的选择
/bin/bash
或read
? - 也许,我可以通过调用(避免 sudo 的密码检查)来启动到某个用户的单个 shell(也许
root
,无需登录?)?.bashrc
sudo install_script
- 也许,存在一个更好的地方来调用该脚本?
- 我不想将交互(较早发生)和 install_script(例如,通过 isolinux 提供不同的启动选项并
/proc/cmdline
在脚本中进行检查)分开,原因如下:在询问用户之前,我想检查系统并概述安装过程中究竟会发生什么。在启动过程的早期阶段,检查系统所需的信息可能尚不易获得。
)
答案1
在我当前的解决方案中,我openvt
首先将以install_script
下行添加到\etc\rc.local
:
openvt -s -w /path/to/install_script
- 它打开了一个新的虚拟终端(除了通过 Ubuntu Core 12.04 提供的其他七个终端之外
Alt-F[1-7]
)。 - 该开关
-s
告诉openvt
切换到新的虚拟终端(无需按Alt-F8
)。 - Switch
-w
让等待给出的openvt
命令的完成。/path/to/install_script
openvt
- 通过这种方式启动后,脚本可以像平常一样通过调用获取来自用户的输入
read
。 - 脚本完成后,虚拟终端关闭(不再使用 Alt-F8 切换到它)并且控制权返回到之前活动的虚拟终端。
答案2
我在为 rasp pi 开发自定义发行版时也遇到了同样的问题。我发现将以下代码添加到我的脚本中可以确保我的脚本能够接收输入。
我在开始读取输入之前调用了此代码:
exec < /dev/tty1
答案3
只是尝试模仿 Slackware linux 安装方法..