How to get forkpty to handle redirection and other bash-isms?

Posted by Jeremy Friesner on Stack Overflow See other posts from Stack Overflow or by Jeremy Friesner
Published on 2010-05-07T20:26:05Z Indexed on 2010/05/07 20:28 UTC
Read the original article Hit count: 386

Filed under:
|
|
|
|

Hi all,

I've got a GUI C++ program that takes a shell command from the user, calls forkpty() and execvp() to execute that command in a child process, while the parent (GUI) process reads the child process's stdout/stderr output and displays it in the GUI.

This all works nicely (under Linux and MacOS/X). For example, if the user enters "ls -l /foo", the GUI will display the contents of the /foo folder.

However, bash niceties like output redirection aren't handled. For example, if the user enters "echo bar > /foo/bar.txt", the child process will output the text "bar > /foo/bar.txt", instead of writing the text "bar" to the file "/foo/bar.txt".

Presumably this is because execvp() is running the executable command "echo" directly, instead of running /bin/bash and handing it the user's command to massage/preprocess.

My question is, what is the correct child process invocation to use, in order to make the system behave exactly as if the user had typed in his string at the bash prompt? I tried wrapping the user's command with a /bin/bash invocation, like this: /bin/bash -c the_string_the_user_entered, but that didn't seem to work. Any hints?

© Stack Overflow or respective owner

Related posts about c++

Related posts about forkpty