【问题标题】:<Not solved yet> How can I run a program on a tty?<尚未解决> 如何在 tty 上运行程序?
【发布时间】:2021-08-09 13:11:29
【问题描述】:

我需要在 linuxkit 启动时进行 tty 交互。

现在,setsid -w agetty -a root -L 38400 ttyS0 vt100 正在工作。 但我想运行一个特定的程序。有什么办法吗?


感谢“Mahdy Mirzade”的回复,

$ setsid sh -c 'exec ls <> /dev/tty2 >&0 2>&1'

这很好用,但它无法控制 tty。

$ setsid sh -c 'exec sh -c "echo hello > /dev/tty" <> /dev/tty10>&0 2>&1'

(error message) cannot create /dev/tty: Inappropriate ioctl for device

因此,无法运行通过 tty 接收用户输入的程序。有没有办法解决这个问题?

【问题讨论】:

    标签: linux initramfs


    【解决方案1】:

    尝试将sh -c 传递给您的命令:

    $ setsid sh -c 'exec ls <> /dev/tty2 >&0 2>&1'
    

    【讨论】:

    • 不幸的是它不起作用。 "用法:agetty [options] ,... []"
    • @user212942 编辑了我的帖子,在 tty2 上工作和输出,但不确定你为什么使用agetty,但agetty 也是一个程序,你的命令已经在运行agetty,要运行其他 porgram,您需要运行 sh 来执行它或在 setsid 之后运行带有 std 输出的程序。
    • 其实我不太了解setsid和agetty。这个方法很好用!谢谢你:)
    • 这很好用,但它无法控制 tty。 setsid sh -c 'exec sh -c "echo hello > /dev/tty" /dev/tty10>&0 2>&1' cannot create /dev/tty: Inappropriate ioctl for device 因此无法运行程序通过 tty 接收用户输入。有没有办法解决这个问题?
    • @user212942 我相信您需要使用stdin 或标准输入将您的输入传递给您的程序,例如当您像VAR=$(ls) 一样存储它时可以使用stdout,您也可以插入您的在首先使用--stdin 运行之前查询您指定的程序,但还有一篇文章可能会帮助您更多地了解用户输入:ryanstutorials.net/bash-scripting-tutorial/bash-input.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2021-04-15
    • 2015-11-12
    • 1970-01-01
    • 2010-10-14
    • 2015-02-27
    • 1970-01-01
    相关资源
    最近更新 更多