PREV INDEX NEXT

Author: Stan Eisenstat
Subject: Re: [Cs323] exec command parameter special characters
Date: Wednesday, 02 Sep 2020, 17:52:06


    > Message Posted By: Anonymous
    >
    > I am specifically looking at this example and was hoping you could clarify
    > one thing.
    >
    > ./fiend . -exec echo foo '>' bar \;
    >
    > When I do system("echo foo '>' bar"), I am returned on the command line
    > "foo > bar" as opposed to piping foo into a file called bar. ...

The call
  system("echo foo '>' bar");
executes the bash command
  echo foo '>' bar"
which outputs
  foo > bar
to the terminal.

But with the single quotes replaced by spaces, the call
  system("echo foo  >  bar");
executes the bash command
  echo foo  >  bar"
which writes "foo\n" to the file bar.

When bash executes the command
  % ./fiend . -exec echo foo '>' bar \;
it passes the list of arguments
  ("./fiend", ".", "-exec", "echo", "foo", ">", "bar", ";")
to fiend.  Since fiend does not re-escape the > (e.g.,
by restoring the surrounding single quotes, the string
passed to system() will be
  "echo foo > bar"
and the effect will be to write "foo\n" to the file bar.
=====

    >                                                         ...  Is this
    > behavior correct for the function we are creating? Or do I have to parse
    > through the exec parameters and recognize that '>' is actually the pipe
    > symbol? Do you have any suggestions on the easiest way of doing this?

If the response above does not answer these questions,
please ask again.

--Stan-
PREV INDEX NEXT