Lets say I have one terminal where the output of \"tty\" is \"/dev/pts/2\" From another terminal, I want to send a command to the first terminal and execute it. Using: echo \"ls
Try
echo `ls`
notice different quote sign.
Usually getty, login, and shell programs are needed for executing commands from tty.
But you can also put a shell directly executing commands from a pseudo terminal. This is simplified example (all error checkings removed):
int main( int argc, char** argv )
{
int master_fd = create_my_own_psudo_terminal() ;
// Wait until someone open the tty
fd_set fd_rset;
FD_ZERO( &fd_rset );
FD_SET( master_fd, &fd_rset );
select( master_fd + 1, &fd_rset, NULL, NULL, NULL );
dup2( master_fd, STDIN_FILENO );
execl("/bin/sh", "sh", 0 );
return 0;
}
Now you can do the following:
Start this simple program in the first terminal.
And send your command from the second terminal:
echo "ls" > /dev/pts/5
And you will get listing in the first terminal.
Note: This is quite unsecure, because login is not done.
No; terminals don't execute commands. They're just channels for data.
You can sort of run a command and attach it to another terminal like this, though:
ls </dev/pts/2 >/dev/pts/2 2>/dev/pts/2
It won't behave exactly like you ran it from that terminal, though, as it won't have that device set as its controlling terminal. It's reasonably close, though.
I realize it's a year late, but there is a simpler way I think. Doesn't this work?
ls > /dev/pts/2
It works on my system.