Sponsored Content
Top Forums Shell Programming and Scripting Perl program to run a Shell script issues... Post 302843722 by zixzix01 on Wednesday 14th of August 2013 03:01:26 PM
Old 08-14-2013
Perl program to run a Shell script issues...

Hi all,

I have the following Perl script which is intended to run a Shell script and generate some logging for the purposes of tracking weather or not the script ran.

I get an error, of course, since I don't know what I'm doing really.

Here is the code:

Code:
#!/opt/perl/bin/perl -w  

# Using recommended pragmas 
use strict; 
use warnings;  

use File::Basename;  

my $Directory = "/directory/script"; 
my $LogFile   = $Directory . "/logs/" . basename($0, ".pl") . ".log"; my $RunFile   = $Directory . "/logs/" . basename($0, ".pl") . ".run"; my $RunScript = $Directory . "/directory/script/script.sh";  


my $OutfileH; #Output File Handle 
print $OutfileH;  

# Make sure another instance isn't already running my $pp = Proc::Pidfile->new (pidfile => $RunFile) or die "Unable to create pidfile: $RunFile\n";  

open( $OutfileH, '>>', $LogFile); 
print $OutfileH &nicetime . ":Running script - " . $RunScript . "\n"; close($OutFileH);  

#Run the shell script through perl program system( $RunScript, ">>/directory/script/logs/script.log  2>&1" ) == 0 or print $OutFileH &nicetime "Script FAILED\n"  or exit(1);  exit(0);  

#Functions 
########################################################################## 

sub nicetime {    
my ( $sec, $min, $hour, $mday, $mon, $year, $yday, $isdst ) = localtime(time);    
my $timestr = sprintf "%4d-%02d-%02d %02d:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec;    
return $timestr; };

The errors I get are:

Code:
String found where operator expected at script.pl line 25, near "&nicetime "Script FAILED\n""         (Missing operator before  "Script FAILED\n"?) 
Global symbol "$OutFileH" requires explicit package name at scrit.pl line 22. 
Global symbol "$OutFileH" requires explicit package name at talend.pl line 25. 
syntax error at script.pl line 25, near "&nicetime "Script FAILED\n"" 
Execution of script.pl aborted due to compilation errors.

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to Run a shell script from Perl script in Parent shell?

Hi Perl/UNIX experts, I have a problem in running a shell script from my perl script (auto.pl). I run the perl script using perl auto.pl from the shell prompt The shell script picks the files in "input" folder and procesess it. The shell script blue.sh has this code. export... (16 Replies)
Discussion started by: hifake
16 Replies

2. Shell Programming and Scripting

want to run different files under the same program using shell script

suppose have different files 1.1 2.2 3.3 4.4 5.5 All the files have to run under the same command say tr -d '\n' so how to run all the files under the same command by using shell script (3 Replies)
Discussion started by: cdfd123
3 Replies

3. Shell Programming and Scripting

Run shell program in perl

Hello , I want to run some shell scripts in my perl script. I need to read the script's name from a file ( this file includes the name of all the scripts) and run the script one by one.. Please let me know how to go .. Thanks in advance, Radha (5 Replies)
Discussion started by: s123.radha
5 Replies

4. Shell Programming and Scripting

How to run perl code within a shell script...?

Hi, I have a sheel script that invokes a perl script...Now, instead havin the perl script as a separate file I'd like put the contents in the sheel script itself...But I am not sure how ro run that perl script contents.please help me Thanks (1 Reply)
Discussion started by: vijay_0209
1 Replies

5. Shell Programming and Scripting

Can you run a unix script from a perl program

Hi all i have a unix script reformatter.sh i have a process whereby this script reformats a file before a perl program is used to update it i am having a little problem automating the entire process . is there a way whereby i can call the unix script from the perl program ? (12 Replies)
Discussion started by: dwightja24
12 Replies

6. Shell Programming and Scripting

Run shell script from C program by calling fork and execl

I need to write a c program that uses the fork and excel system calls to run the shell script mode invoked like this: "./mode 644 ls -l" (that is the argumetns will always be 644 ls -l) here's the mode script: #!/bin/sh octal="$1" shift find . -maxdepth 1 -perm $octal -exec $@ {} \; ... (3 Replies)
Discussion started by: computethis
3 Replies

7. Shell Programming and Scripting

Calling perl script in shell program

How to call a perl script in shell program / shell scripting. PLS HELP ME (2 Replies)
Discussion started by: hravisankar
2 Replies

8. Shell Programming and Scripting

Shell script to run a python program on multiple entries in a file

Hello I am trying to run a python program using shell script, which takes a single argument from a file. This file has one entry per line : 1aaa 2bbb 3ccc 4ddd 5eee ... ... ... My shell script runs the program, only for the last entry : #!/bin/sh IFS=$'\n' for line in $(cat... (2 Replies)
Discussion started by: ad23
2 Replies

9. Shell Programming and Scripting

Issues while trying to run a shell script using the command sh <filename.prog>

Hi, I'm facing issues while trying to run a sample program on Linux. If I try to run the script using the command "sh <filename.prog>", it doesn't work. But, if I try to execute it using the command "ksh <filename.prog>", it works fine. Even ". ./filename.prog" works fine. Can you... (6 Replies)
Discussion started by: venkatesh17
6 Replies

10. Shell Programming and Scripting

Shell script run in a case statement call to run a php file, also Perl

Linux System having all Perl, Python, PHP (and Ruby) installed From a Shell script, can call a Perl, Python, PHP (or Ruby ?) file eg eg a Shell script run in a case statement call to run a php file, also Perl or/and Python file??? Like #!/usr/bin/bash .... .... case $INPUT_STRING... (1 Reply)
Discussion started by: hoyanet
1 Replies
ePerl(3pm)						User Contributed Perl Documentation						ePerl(3pm)

NAME
Parse::ePerl - Perl interface to the ePerl parser SYNOPSIS
use Parse::ePerl; $rc = Parse::ePerl::Preprocess($p); $rc = Parse::ePerl::Translate($p); $rc = Parse::ePerl::Precompile($p); $rc = Parse::ePerl::Evaluate($p); $rc = Parse::ePerl::Expand($p); DESCRIPTION
Parse::ePerl is the Perl 5 interface package to the functionality of the ePerl parser (see eperl(1) for more details about the stand-alone program). It directly uses the parser code from ePerl to translate a bristled script into a plain Perl script and additionally provides functions to precompile such scripts into P-code and evaluate those scripts to a buffer. All functions are parameterized via a hash reference $p which provide the necessary parameters. The result is a return code $rc which indicates success(1) or failure(0). PREPROCESSOR: $rc = Parse::ePerl::Preprocess($p) This is the ePerl preprocessor which expands "#include" directives. See eperl(1) for more details. Possible parameters for $p: Script Scalar holding the input script in source format. Result Reference to scalar receiving the resulting script in bristled Perl format. BeginDelimiter Scalar specifying the begin delimiter. Default is ``"<:"''. EndDelimiter Scalar specifying the end delimiter. Default is ``":>"''. INC A reference to a list specifying include directories. Default is "@INC". TRANSLATION: $rc = Parse::ePerl::Translate($p) This is the actual ePerl parser, i.e. this function converts a bristled ePerl-style script (provided in "$p-"{Script}> as a scalar) to a plain Perl script. The resulting script is stored into a buffer provided via a scalar reference in "$p-"{Result}>. The translation is directly done by the original C function Bristled2Plain() from ePerl, so the resulting script is exactly the same as with the stand-alone program eperl. Possible parameters for $p: Script Scalar holding the input script in bristled format. Result Reference to scalar receiving the resulting script in plain Perl format. BeginDelimiter Scalar specifying the begin delimiter. Default is ``"<:"''. EndDelimiter Scalar specifying the end delimiter. Default is ``":>"''. CaseDelimiters Boolean flag indicating if the delimiters are case-sensitive (1=default) or case-insensitive(0). Example: The following code $script = <<'EOT'; foo <: print "bar"; :> quux EOT Parse::ePerl::Translate({ Script => $script, Result => $script, }); translates the script in $script to the following plain Perl format: print "foo "; print "bar"; print " "; print "quux "; COMPILATION: $rc = Parse::ePerl::Precompile($p); This is an optional step between translation and evaluation where the plain Perl script is compiled from ASCII representation to P-code (the internal Perl bytecode). This step is used in rare cases only, for instance from within Apache::ePerl(3) for caching purposes. Possible parameters for $p: Script Scalar holding the input script in plain Perl format, usually the result from a previous Parse::ePerl::Translate(3) call. Result Reference to scalar receiving the resulting code reference. This code can be later directly used via the &$var construct or given to the Parse::ePerl::Evaluate(3) function. Error Reference to scalar receiving possible error messages from the compilation (e.g. syntax errors). Cwd Directory to switch to while precompiling the script. Name Name of the script for informal references inside error messages. Example: The following code Parse::ePerl::Precompile({ Script => $script, Result => $script, }); translates the plain Perl code (see above) in $script to a code reference and stores the reference again in $script. The code later can be either directly used via &$script instead of "eval($script)" or passed to the Parse::ePerl::Evaluate(3) function. EVALUATION: $rc = Parse::ePerl::Evaluate($p); Beside Parse::ePerl::Translate(3) this is the second main function of this package. It is intended to evaluate the result of Parse::ePerl::Translate(3) in a ePerl-like environment, i.e. this function tries to emulate the runtime environment and behavior of the program eperl. This actually means that it changes the current working directory and evaluates the script while capturing data generated on STDOUT/STDERR. Possible parameters for $p: Script Scalar (standard case) or reference to scalar (compiled case) holding the input script in plain Perl format or P-code, usually the result from a previous Parse::ePerl::Translate(3) or Parse::ePerl::Precompile(3) call. Result Reference to scalar receiving the resulting code reference. Error Reference to scalar receiving possible error messages from the evaluation (e.g. runtime errors). ENV Hash containing the environment for %ENV which should be used while evaluating the script. Cwd Directory to switch to while evaluating the script. Name Name of the script for informal references inside error messages. Example: The following code $script = <<'EOT'; print "foo "; print "bar"; print " "; print "quux "; EOT Parse::ePerl::Evaluate({ Script => $script, Result => $script, }); translates the script in $script to the following plain data: foo bar quux ONE-STEP EXPANSION: $rc = Parse::ePerl::Expand($p); This function just combines, Parse::ePerl::Translate(3) and Parse::ePerl::Evaluate(3) into one step. The parameters in $p are the union of the possible parameters for both functions. This is intended as a high-level interface for Parse::ePerl. AUTHOR
Ralf S. Engelschall rse@engelschall.com www.engelschall.com SEE ALSO
eperl(1) Web-References: Perl: perl(1), http://www.perl.com/ ePerl: eperl(1), http://www.engelschall.com/sw/eperl/ perl v5.14.2 2012-04-07 ePerl(3pm)
All times are GMT -4. The time now is 09:06 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy