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

我与影子孤独终老i 提交于 2019-12-04 06:57:42

问题


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" > "/dev/pts/2" only prints "ls" in the first terminal Is there a way to execute the string?


回答1:


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.




回答2:


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.




回答3:


Try

echo `ls`

notice different quote sign.




回答4:


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.



来源:https://stackoverflow.com/questions/8677623/executing-string-sent-from-one-terminal-in-another-in-linux-pseudo-terminal

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