Sponsored Content
Full Discussion: Unable to run function
Top Forums Shell Programming and Scripting Unable to run function Post 302694157 by bakunin on Thursday 30th of August 2012 08:12:08 AM
Old 08-30-2012
Quote:
Originally Posted by Subbeh
When you test your functions, do you always create a separate script to call that function?
Yes, i do that. It is called "regression test" because functions in my library usually do some pretty abstracted things and i want them to be as reliable as possible. If you search the forums for my name and "ksh function" you will even find some examples of what i wrote.

My usual setup is like this:

i have my library in "/usr/local/lib/ksh" and all my function names start with "f_". This way i know immediately which are external functions and which are not in complex scripts.

I have one "environment" function, which i source in at the beginning of every script and which sets the environment from the beginning, including PATH, FPATH and so on. This way i have always the same environment in every script i write and don't have to worry about scripts being started from crontab and similar common problems.

In addition i have one environment variable "DEVELOP", which is tested in the environment function. If it has any value at all FPATH is not set to "/usr/local/lib/ksh" but to "~/lib", so that a local copy of the library in my $HOME is used. This way i can locally test the scripts with new versions of the lib functions (my user has this variable set in ".kshrc") and then just roll out the scripts. Other users don't have the variable set so they will automatically use the general version of the library with no change.

usual script start:

Code:
#! /bin/ksh

if [ -n "$DEVELOP" ] ; then
     . ~/lib/f_env
else
     . /usr/local/lib/ksh/f_env
fi

# set local vars after this, f_env clears the environment first
typeset localvar=....

... rest of code
exit 0

f_env would look like this (parts):

Code:
f_env ()
{
if [ -z "$NEVER_USE_THIS_VAR" ] ; then           # are we called recursively ?

     unset ENV                                   # clear the environment

     #---------------------------------------------------- set basic environment
     typeset -x OS=$(uname -a | cut -d' ' -f1)   # find out the OS
                                                 # read in standard environment
     case "$OS" in
          AIX)
               . /etc/environment
               ;;

          Linux)
               . /etc/profile
               ;;

          *)
               . /etc/environment
               ;;
     esac
                                                 # set default TERM variable
     case "$OS" in
          AIX)
               TERMDEF="$(termdef)"
               ;;

          Linux)
               TERMDEF="$TERM"
               ;;

          *)
               TERMDEF="$TERM"
               ;;

     esac
     typeset -x TERM=${TERMDEF:-'wyse60'}        # set default TERM variable

     typeset -x LANG=C                           # default language environment
     typeset -x EDITOR=vi                        # what else ? ;-))
     typeset -x VISUAL=$EDITOR

     typeset -x PATH="/usr/bin"                  # set the path
                PATH="$PATH:/bin"
                PATH="$PATH:/etc"
                PATH="$PATH:/usr/sbin"
                PATH="$PATH:/usr/ucb"
                PATH="$PATH:/sbin"
                PATH="$PATH:/usr/bin/X11"
                PATH="$PATH:/usr/local/bin"      # tools, home for scripts
                PATH="$PATH:/usr/local/sbin"     # -"-

     typeset -x chTmpDir=""                      # path for temporary files

     #---------------------------------------------------- debugging stuff
     if [ -z "$chFullDebug" ] ; then             # debug switch
          typeset -x chFullDebug=""
     else
          typeset -x chFullDebug                 # export if already set
     fi
     typeset -x SIMULATE=''                      # set to 'print' for
                                                 # simulation mode
     typeset -x TRACE=''                         # set to 'on' for trace mode

     if [ -z "$DEVELOP" ] ; then
          typeset -x FPATH="/usr/local/lib/ksh"  # set fnc path for fnc lib
          FPATH="$FPATH:/usr/local/bin"
          FPATH="$FPATH:/usr/local/sbin"
     else
          typeset -x FPATH=~/lib        # for lib development
     fi
     #---------------------------------------------------- global constants
     typeset -x chProgName="$0"                  # const. for main program name

     typeset -x chUsageShort=""                  # short usage message
     typeset -x achUsageLong[0]=""               # long usage message (line)

     if [ -z "$fLogFile" ] ; then                # log file
          if [ $(f_ImRoot ; print $?) -eq 0 ] ; then
               typeset -x fLogFile='/usr/local/log/swd.log'
          else
               typeset -x fLogFile=~/swd.log
          fi
     else
          typeset -x fLogFile
     fi
     if [ -z "$fErrFile" ] ; then                # error file
          if [ $(f_ImRoot ; print $?) -eq 0 ] ; then
               typeset -x fErrFile='/usr/local/log/swd.err'
          else
               typeset -x fErrFile=~/swd.err
          fi
     else
          typeset -x fErrFile
     fi

     .... etc. ....
     #-------------------------------------------------- reentrancy protection
     typeset -x NEVER_USE_THIS_VAR="KILROY_WAS_HERE"
fi
}

There are also parts dealing with supported alerting systems (BMC Patrol, HP OpenView, and some other are supported), and some site-dependent stuff, but i think you get the drift.

Notice the "if [ -z "$DEVELOP" ]" line, where the FPATH is set accordingly.

I hope this helps.

bakunin
These 2 Users Gave Thanks to bakunin For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

unable to run a script

thi is (10 Replies)
Discussion started by: angelina
10 Replies

2. Solaris

Unable to run xclock

Hello. I am trying to run xclock on newly built solaris box - These are the steps I followed: # DISPLAY=localhost:0.0 # export DISPLAY # xclock xclock: not found # cd /usr/openwin/bin # ./xclock Error: Can't open display: localhost:0.0 # Please suggest, what am i doing wrong? Thank... (27 Replies)
Discussion started by: panchpan
27 Replies

3. UNIX for Advanced & Expert Users

Unable to execute a function using trap

I have a script A which calls script B. I wrote a function in script A to be executed when Kill command is issued for script A and I invoke that function using the trap command.The function identifies all child process running under script A (in this case script B) and kills the child process and... (3 Replies)
Discussion started by: smohandass
3 Replies

4. Shell Programming and Scripting

unable to return a decimal value from a function

Hi Guys, I am unable to return a decimal value from a function to the main script. I am getting the correct value in the function but when it is returning to the main script using "return" it is coming as 0. Below is my code. read VALUE_V fun_FATHERID fun_SONID fun_TOPID fun_RTYPE <... (2 Replies)
Discussion started by: mac4rfree
2 Replies

5. AIX

unable to run at job

Hi All, I m not able to run at job with normal user on AIX system os version is 5300-05-06. I am able to run at job only with root user. When I try to run at job with any other user I am getting error: at: you are not authorized to use at. Sorry. I checked at.deny file, it is... (4 Replies)
Discussion started by: pkatkade
4 Replies

6. HP-UX

Unable to run some commands in HP-UX

Hi All, I want to get %cpu and %memory utilization for a given process id in HP-UX so am using the following commands 1)TOP -p <PID> am getting error message like Quitting top: pset 26323 doesn't exist,but when am using only TOP command without any options its working fine. 2)ps -e -o pcpu... (5 Replies)
Discussion started by: Ramya_Nm
5 Replies

7. Programming

unable to use a function to crate a joinable thread

In my program, threads may be created when some events trigger. So I can't create threads on initialization. Theremore,I write a createThread() function to create thread. However, it is blocking at first call and don't run anymore? why? #include <pthread.h> #include <stdio.h> #include... (4 Replies)
Discussion started by: sehang
4 Replies

8. Shell Programming and Scripting

Unable to run command after ssh

Hello, I am trying to create a ksh script to login to server and collect gather output of some command to troubleshoot some issue. DATE=`date +%b.%d.%Y.%M.%H` echo " Enter emp id to login to server" read Eid Eid=$Eid echo " Enter hostname of the system" read HOST HOST=$HOST... (2 Replies)
Discussion started by: saurabh84g
2 Replies

9. Programming

Unable to run java in redhat os

I am unable to run java from jdk. it says "cannot execute binary file" I downloaded the jdk again freshly but the problem still persists. All files have execution permission. Both OS and JDK are 64bit. Please help me out. $ pwd /home/XXXXX/apache-tomcat-6.0.18/jdk1.5.0_14/bin $... (2 Replies)
Discussion started by: meetsriharsha
2 Replies

10. Red Hat

Unable to capture value from function

Hi Experts, Am writing a code which need to check for the previous day date and pickup the file as per the previous day date. Problem: Why variable "YDATE" is empty ? O/S: RHEL 5.6 Shell: BASH Desired O/P: ls -lrt /opt/test/user/atsuser.NHU/out/demon.08272017 When I checked the... (3 Replies)
Discussion started by: pradeep84in
3 Replies
All times are GMT -4. The time now is 02:30 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy