在串行端口linux上用交互式bash脚本替换登录提示

在串行端口linux上用交互式bash脚本替换登录提示,linux,bash,login,console,startup,Linux,Bash,Login,Console,Startup,我正在制作一个CentOS盒子 我期望的是:在启动时运行我自己的CLI/安装程序,而不是在串行控制台(telnet)上进行登录提示 到目前为止我所做的:- 我在/etc/init/下的serial.conf和serial-ttyUSB0.conf文件中将调用更改为“agetty”命令,如下所示:- exec /sbin/agetty -n -l <path-to-my-custom-script> ........ exec/sbin/agetty-n-l。。。。。。。。 我的c

我正在制作一个CentOS盒子

我期望的是:在启动时运行我自己的CLI/安装程序,而不是在串行控制台(telnet)上进行登录提示

到目前为止我所做的:- 我在/etc/init/下的serial.conf和serial-ttyUSB0.conf文件中将调用更改为“agetty”命令,如下所示:-

exec /sbin/agetty -n -l <path-to-my-custom-script> ........
exec/sbin/agetty-n-l。。。。。。。。
我的custom.sh脚本是:-

#!/bin/bash

LOOP_FLAG=0
while [ $LOOP_FLAG -eq 0 ]; do
        for TTY in /dev/ttyS0 /dev/tty0; do
            echo "Please choose to enter in 'setup' or 'cli'. (s/c)?  " > $TTY
        done
        read sc
        case $sc in
            [Ss]* ) LOOP_FLAG=1; <some-executable-cli-file-path>; break;;
            [Cc]* ) LOOP_FLAG=1; <some-executable-setup-file-path>; break;;
            * ) for TTY in /dev/ttyS0 /dev/tty0; do
                    echo "Please press 's' or 'c'." >$TTY
                done;;
        esac
done
#/bin/bash
循环_标志=0
而[$LOOP_FLAG-等式0];做
对于TTY,在/dev/ttyS0/dev/tty0中;做
echo“请选择输入'setup'或'cli'。(s/c)?”>$TTY
完成
读sc
案件$sc in
[Ss]*)循环_标志=1;打破
[Cc]*)循环_标志=1;打破
*)用于TTY中的/dev/ttyS0/dev/tty0;做
echo“请按's'或'c'”>$TTY
完成;;
以撒
完成
但当系统启动时,在telnet会话中,我只能在屏幕上看到“请选择输入…”问题,之后我无法在控制台上键入任何内容

还有一个更新: 如果我在shell提示符上按原样运行上面的agetty命令(比如从ssh会话),那么它在串行控制台(telnet)上可以正常工作。但是,从上面的启动脚本来看,它不起作用

有人能帮我解决这个问题吗

提前谢谢


-尼奥

对不起,我迟到了几年。希望这将有助于人们在未来寻找解决这个问题的方法

问题在于:

-n、 --跳过登录不提示用户输入登录名。这可以与-l选项结合使用,以调用非标准登录 进程,例如BBS系统注意,使用-n选项,agetty 未从登录的用户处获取任何输入,因此无法 计算的奇偶校验、字符大小和换行处理 连接。它默认为空格奇偶校验、7位字符和ASCII CR(13)行尾字符。请注意使用agetty的程序 启动(通常为/bin/login)以root用户身份运行

因此,您需要在替换登录提示的脚本中自己初始化终端。我发现以下设置工作正常:

/bin/stty -F /dev/ttyO0 115200 cs8 sane

请记住将波特率和终端名称替换为您自己的名称。

很抱歉回复太晚。非常感谢。早些时候找到了相同的答案并实施了。