linux - write commands from one terminal to another linux - write commands from one terminal to another linux linux

linux - write commands from one terminal to another


Python code:

#!/usr/bin/pythonimport sys,os,fcntl,termiosif len(sys.argv) != 3:   sys.stderr.write("usage: ttyexec.py tty command\n")   sys.exit(1)fd = os.open("/dev/" + sys.argv[1], os.O_RDWR)cmd=sys.argv[2]for i in range(len(cmd)):   fcntl.ioctl(fd, termios.TIOCSTI, cmd[i])fcntl.ioctl(fd, termios.TIOCSTI, '\n')os.close(fd)


Is posible to show the output of a command on multiple terminals simultaneously with the following script., and it works with all console programs, including the editors. For example doing:

execmon.bash  'nano hello.txt' 5

Open an editor and both the output and the text that we introduce will be redirected to the virtual terminal number 5. You can see your terminals:

ls /dev/pts

Each virtual terminal has an associated number.

Is work with the normal terminal, konsole and xterm, just create the file execmon.bash and put this:

#! / bin / bash# execmon.bash# Script to run a command in a terminal and display the output# in the terminal used and an additional one.param = $ #if [$ param-eq 2]; Then    echo $ 1 | tee a.out a.out && cat> / dev / pts / $ 2 && exec `cat` a.out | tee / dev / pts / $ 2 && rm a.outelse    echo "Usage:"    echo "execmon 'command' num '    echo "-command is the command to run (you have to enter ')"    echo "-num is the number of virtual console to output to the"fi

Example:

execmon.bash 'ls-l' 5execmon.bash 'nano Hello.txt' 5


This is hairy. The stdin file in proc you're trying to use is a symlink to the terminal device (probably /dev/pts/something). There are two processes that have that device open: the shell (your target) and the terminal emulator (e.g. gnome-terminal), and they use it like a socket to pass data in both directions. Presumably the latter is stealing the output and displaying it, so the shell never sees it. I don't think this technique will work.

What are you trying to accomplish? You can't run the process as a child using conventional tools like popen()? If it's a GUI terminal emulator, you could try to forge keyboard input via X events or the kernel's uinput API.