【问题标题】:how to start linux shell dynamically如何动态启动linux shell
【发布时间】:2014-01-08 13:21:41
【问题描述】:

下面是启动shell的inittab文件入口。

::respawn:/bin/bash < /dev/ttyS0 > /dev/ttyS0 2> /dev/ttyS0

我的问题是,我正在阅读一个配置文件,其中说明需要在哪个 tty 端口 /bin/bash 上重新生成。文件内容可能是ttyS0ttyS1ttyS2

如何根据文件内容重生/bin/bash

【问题讨论】:

    标签: bash shell kernel init


    【解决方案1】:

    假设你的配置文件是/etc/dynshell.cfg 并且在一行中包含设备名称(如ttyS0),没有其他内容,你可以这样写……

    #!/bin/sh
    port=/dev/$(</etc/dynshell.cfg)
    exec /bin/bash <$port >$port 2>$port
    

    ...进入/usr/local/sbin/dynshell,然后使用这一行:

    ::respawn:/usr/local/sbin/dynshell
    

    虽然这可能更好/更安全:

    #!/bin/sh
    port=/dev/$(</etc/dynshell.cfg)
    exec /bin/bash 0<>$port >&0 2>&0
    

    【讨论】:

    • 感谢您的回答。如果我们运行 exec 它只会产生 /bin/bash 一次,对吗?如果有人杀死/退出 shell,respawn 将再次产生 /bin/bash。