在启动之前,rc.local是否可以等待Bash脚本完成

时间:2017-02-15 00:44:03

标签: linux bash boot

我正在运行Kali Linux的滚动版本,并且已经开始编写一个在启动时由rc.local执行的脚本,这将允许用户更新计算机的主机名。

rc.local中:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/root/hostnameBoot

exit 0

hostnameBoot脚本:

#!/bin/bash
# /etc/init.d/hostnameBoot

# Solution Added
exec < /dev/tty0

echo "Enter desired hostname:"
read hostname
echo "New hostname: $hostname"

#exit 0

如您所见,当前hostnameBoot会提示用户输入新的主机名,然后将主机名返回给用户。

启动时,rc.local执行脚本,但不会提示用户输入新的主机名。

示例启动输出:

- misc boot info - 
Enter desired hostname:
New hostname:

Sample Boot Output一次显示所有内容,不允许用户输入新的主机名。显示行后,系统将继续登录屏幕。系统的期望行为将允许用户有时间输入新的主机名,然后呈现先前提交的输入。

注意:该脚本不是最终产品,只是使用rc.local触发脚本的概念验证。

1 个答案:

答案 0 :(得分:0)

启动脚本(包括rc.local)通常不以交互模式执行(即,用户可以输入数据的功能完备的终端)。它们的输出被重定向到控制台(所以你可以看到引导消息),但输入很可能是/dev/null(所以read会立即返回而没有任何内容可读。)

您需要手动重定向读取以始终使用固定终端(例如read </dev/tty0)或打开虚拟控制台以进行用户输入(例如openvt -s -w /root/hostnameBoot)。有关详细信息,请参阅this answer