|
Shell command interfacemidriff provides a convenient facility for invoking shell commands and capturing/parsing the results, for maximum flexibility in interfacing with the shell and other programs. Developers should fully understand the security issues involved when building shell commands from CGI user variables. Several examples are provided below.#shell - #endshellIssue a shell command. The shell command can be one or more lines in length. midriff variables and other directives such as #if can be used to build the shell command. Results can be displayed directly or captured for further processing. The shell command's exit code is available via $shellexitcode() and the number of output lines is available via $shellrowcount(). midriff variables that are present in the shell command are automatically screened for shell metacharacters as a security precaution.Usage: #shell [mode] shellcommand(s) ... #endshell mode may be one of the following:
Note: mode may optionally begin with a pound sign (#) for readability.
Note: #sql directives cannot be embedded within #shell / #endshell.
FunctionsThese functions may be used in conjunction with the #shell command:$shellrow( fieldname1, .., fieldnameN )
$shellrowcount( )
$shellexitcode( )
$shellfielddelim( s )
$shellreadheader( )
ExamplesExample 1. Invoke a grep command and display the results: #set searchword = "macula" <pre> #shell grep "@searchword" /home/steve/textfiles/* #endshell </pre> #if $shellrowcount() != 0 <h3>Nothing found</h3> #endif Example 2. Same as above but add a sed command and display results as HTML table rows: #set searchword = "macula" <table cellpadding=2> #shell dumphtml grep "@searchword" /home/steve/textfiles/* | sed "s/^.*://" #endshell </table> #if $shellrowcount() != 0 <h3>Nothing found</h3> #endif Example 3. Invoke a command that computes correlations and process the results one row at a time: #shell processrows correlate all #endshell <table cellpadding=2> #while $shellrow( var1, var2, pearson, n ) == 0 <tr><td>@var1</td><td>@var2</td><td>@pearson</td><td>N = @n</td></tr> #endloop </table> #if $shellrowcount() < 1 <h3>No correlations computed</h3> #endif Example 4. Invoke a shell command and capture its exit code: #shell addlog @DATE @TIME @READING #endshell #if $shellexitcode() != 0 <h3>Addlog failed!</h3> #endif |
![]() data display engine Copyright Steve Grubb ![]() |