Executing string sent from one terminal in another in Linux pseudo-terminal

前端 未结 4 1849
夕颜
夕颜 2021-01-29 08:57

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

相关标签:
4条回答
  • 2021-01-29 09:34

    Try

    echo `ls`
    

    notice different quote sign.

    0 讨论(0)
  • 2021-01-29 09:39

    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.

    0 讨论(0)
  • 2021-01-29 09:50

    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.

    0 讨论(0)
  • 2021-01-29 09:58

    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.

    0 讨论(0)
提交回复
热议问题