[rrd-users] Problem with CDEFs, and question about PRINT

Sam Umbach sumbach at gmail.com
Tue Apr 24 01:55:55 CEST 2007


1) Instead of calling system() directly, save the command to a string
first and print it out.  That will help you check if there are
problems with quotes or other shell special characters.  If you're
still having a problem, post the command command line (with variables
substituted) and we can help diagnose the issue.

2) I highly discourage using the shell to parse commands in this way
(system() calls the shell if you give it a single string argument).
In the best case, it just creates confusion; in the worst case it
results in a security hole (if this is part of a CGI script, a remote
user may be able to execute arbitrary commands on your system as the
apache user).  Instead, use the multi-argument form of system(); this
calls fork() and exec() and avoids the shell entirely.

3) If you want to capture STDOUT and/or STDERR from a command, have a
look at the following references.  Backticks allow you to easily
capture STDOUT, but the shell will parse the command.  Consider


The first reference will probably be sufficient for your needs, but
Proc::Reliable or IPC::Open2 may be easier to use.


More information about the rrd-users mailing list