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

。_饼干妹妹 提交于 2019-12-02 13:14:47

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.

Joseph Spenner

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.

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!