2017-02-15 44 views
0

我运行Linux的卡莉的滚动发布之前完成,并已开始编写由rc.local中启动时执行的脚本,那将是允许用户更新计算机的主机名。可以rc.local中等待bash脚本启动

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: 

样品引导输出显示全部一次,并且不允许用户输入一个新的主机名。一旦显示这些行,系统就会继续登录屏幕。系统的期望行为将允许用户有时间输入新的主机名,然后用先前提交的输入来呈现。

注:该脚本是不是最终产品,它只是一个使用rc.local中来触发脚本概念证明。

+0

这可能是更适合[unix.se。 –

回答

0

启动脚本,包括rc.local,通常不会在交互模式(即,与一个全功能的终端,其中用户可以输入数据)执行。它们的输出重定向到控制台(所以你可以看到启动信息),但输入是最有可能的(立刻让read回报没什么可读取)/dev/null

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

+0

感谢您解释启动过程中发生了什么。它有助于更​​多地了解系统。解决方案:exec Yegnaro