相关疑难解决方法(0)

如何将初始输入传递到进程中,然后进行交互?

我希望能够在启动交互式进程时注入初始命令,以便我可以执行以下操作:

echo "initial command" | INSERT_MAGIC_HERE some_tool

tool> initial command 

[result of initial command] 

tool> [now I type an interactive command]
Run Code Online (Sandbox Code Playgroud)

什么行不通:

  • 只是管道输入初始命令不起作用,因为这导致stdin没有连接到终端

  • 写入/ dev/pts/[number]将输出发送到终端,而不是输入到进程,就像它来自终端一样

什么会有缺点:

  • 创建一个分叉子命令,写入stdin,然后从自己的stdin转发所有内容.下行 - 终端控制事物(如线与字符模式)不起作用.也许我可以用代理伪终端做些什么?

  • 使用命令行选项创建xterm的修改版本(我正在为此任务启动一个),以在遇到所需的提示字符串后注入其他命令.丑陋.

  • 制作我正在尝试运行的工具的修改版本,以便它在命令行上接受初始命令.打破标准安装.

(顺便提一下,当前感兴趣的工具是android的adb shell - 我想在手机上打开一个交互式shell,自动运行命令,然后进行交互式会话)

unix linux pipe

38
推荐指数
2
解决办法
2万
查看次数

编写冒充TTY的程序

我正在编写一个程序,从stdin读取输入,操作输入,并将输出写入stdout.但是,许多程序检查stdin是终端还是管道(通过调用类似函数isatty),并以不同方式生成输出.我如何让我的程序假装成TTY?

该解决方案应适用于Linux和macOS.任何生成独立二进制文件的编程语言都是可以接受的,但Go是首选.

请注意,我问的是一个编程问题,而不是要求一个工具.所以,我喜欢scriptunbuffer不喜欢的东西.

c linux macos go tty

13
推荐指数
1
解决办法
1335
查看次数

如何在C语言的Linux中使用伪终端?

我正在试图弄清楚如何在linux中使用伪终端,基本上我想创建一个telnetd克隆,我之前在一个问题中提到.

我理解主从终端的概念,我对如何在C中使用系统调用有了基本的把握.

我的问题涉及打开slave/master文件描述符后的下一步.如何在奴隶中推出getty?网上是否有使用forkpty(),openpty()或其他API的资源?

C中的一些例子会有所帮助.这是一个非常相似的问题,但没有人真正提供任何例子.

c linux pty

12
推荐指数
2
解决办法
1万
查看次数

shell在ncurses窗口?

我目前正在尝试使用ncurses编写一个最小的终端多路复用器.但是,当我尝试execvshell时,它不会打印到窗口,而是启动一个新的子进程来控制窗口(即忽略ncurses).

我怎样才能防止这种情况并让ncurses控制它?有没有办法获得tty并控制它?

编辑

感谢Ross Ridge的评论,我现在知道我需要创建一个伪终端,然后我将其读入一个ncurses窗口.但是,我无法弄清楚如何在ncurses窗口中打印stdout.是否有读取文件描述符的ncurses函数?或者我必须使用read()printw()不知何故?

c curses ncurses

3
推荐指数
1
解决办法
1406
查看次数

标签 统计

c ×3

linux ×3

curses ×1

go ×1

macos ×1

ncurses ×1

pipe ×1

pty ×1

tty ×1

unix ×1