我显然不希望得到正确的结果。
$ man less
在另一个终端:
$ ps u
# Find that pid of less is 45783
$ lsof -p 45783
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
less 45783 lust cwd DIR 1,4 442 46 /usr/share/man
less 45783 lust txt REG 1,4 137712 9698 /usr/bin/less
less 45783 lust txt REG 1,4 600576 9397 /usr/lib/dyld
less 45783 lust txt REG 1,4 303120384 2911813 /private/var/db/dyld/dyld_shared_cache_x86_64
less 45783 lust 0 PIPE 0xffffff8025bf38c0 16384
less 45783 lust 1u CHR 16,2 0t82970 763 /dev/ttys002
less 45783 lust 2u CHR 16,2 0t82970 763 /dev/ttys002
less 45783 lust 3r REG 1,4 4589 286688 /private/etc/man.conf
less 45783 lust 4r CHR 2,0 0t0 306 /dev/tty
$ echo "q" > /dev/ttys002
此时man less
正在运行的终端打印q和换行符,而不是退出联机帮助页的显示。
如何让它发送原始“q”?管道不起作用,我得到“zsh:权限被拒绝:/ dev / ttys002”。为echo
切换cat
并输入其中也不起作用。
答案 0 :(得分:0)
MAybe你想要的是一个coprocesses。 zsh支持那些。
coproc bc -l
print -p 1 + 1
read -p answer
echo $answer
2
这允许您通过write -p
试试这个:它只是代码的一小部分,可以根据需要进行修改。它写入终端的输入队列,/ dev / pty3或其他。仅以root身份运行。用法:./puttty / dev / pty3
int main(int argc, char **argv)
{
int tty = open(argv[1], O_WRONLY|O_NONBLOCK);
char ch[80]={0x0};
char *p=NULL;
while( fgets(ch, 80, stdin)!=NULL) //Read keyboard input e.g., q<return>
{
for(p=ch; *p && *p!='\n'; p++)
ioctl(tty, TIOCSTI, p); // put each byte into /dev/pty3 input queue.
}
close(tty); // ctrl-Z ends the program.
return 0;
}