Sponsored Content
Top Forums UNIX for Dummies Questions & Answers Script giving different result on Linux compared to Unix Post 302279877 by drl on Saturday 24th of January 2009 01:32:49 PM
Old 01-24-2009
Hi.

Please learn to use CODE tags to make your scripts and data readable.

The problem is scope -- in some versions of shells, the pipe-into-while-loop is run in a separate process, so that variables are out of scope -- they no longer exist, and variables are not passed up from children to parents.

Some versions of Linux will have a recent version of ksh and allow your script to run as you wish (code omitted, paths and names made local):
Code:
$ ./s2

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-1-686, i686
Distribution        : Debian GNU/Linux 5.0
ksh 93s+

OUTBSTAT[0]=1000
OUTBSTAT[1]=1001
OUTBSTAT[2]=1002
 OUTBSTAT[0]=1000
 OUTBSTAT[1]=1001
 OUTBSTAT[2]=1002

However, a portable method would be to re-direct into the while loop, useful for pdksh, for example, on this different version of Linux:
Code:
#!/bin/ksh

echo
set +o nounset
LC_ALL=C ; LANG=C ; export LC_ALL LANG
echo "Environment: LC_ALL = $LC_ALL, LANG = $LANG"
echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version "=o" $(_eat $0 $1)
set -o nounset
echo

K=0
SCRIPT_DIR=/local/home/temp/Gen
SCRIPT_DIR=.

# cat $SCRIPT_DIR/test/list.txt | while read WRDLST
# cat $SCRIPT_DIR/list.txt | while read WRDLST
cp $SCRIPT_DIR/list.txt t1
while read WRDLST
do
  # set -A STAT `cat $SCRIPT_DIR/test/shst.txt | grep $WRDLST | awk '{print $2}'`
  set -A STAT `cat $SCRIPT_DIR/shst.txt | grep $WRDLST | awk '{print $2}'`

  OUTBSTAT[$K]=${STAT[0]}
  echo "OUTBSTAT[$K]=${OUTBSTAT[$K]}"
  K=`expr $K + 1 `
done <t1

K=0
while [ $K -ne 3 ]
do
  echo " OUTBSTAT[$K]=${OUTBSTAT[$K]}"
  K=`expr $K + 1`
done

exit 0

Producing:
Code:
% ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.11-x1, i686
Distribution        : Xandros Desktop 3.0.3 Business
PD KSH v5.2.14 99/07/13.2

OUTBSTAT[0]=1000
OUTBSTAT[1]=1001
OUTBSTAT[2]=1002
 OUTBSTAT[0]=1000
 OUTBSTAT[1]=1001
 OUTBSTAT[2]=1002

This is a common problem among shells. Moral: don't pipe into while loops ... cheers, drl
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

My script is not giving result for 2 or more arguments

Hi, I am new to shell scripting and my below script is not giving result for 2 or more arguments. Can anyone help pls. #!/bin/sh sname=$(basename $(readlink -nf $0)) echo "This is $sname, running at $(date)" echo "It is running on $(hostname)" echo "Script being run by" echo " User... (3 Replies)
Discussion started by: baigmd
3 Replies

2. Programming

Test program not giving expected result

I have five classes. 2 composition classes,1 aggregation class and 1 dependency class.I have coded all the classes but one of my test program is not giving me the expected result.I have the following classes: TimeStamp Interval (composition of 2 TimeStamps) TimeSheet ( aggregation of many... (3 Replies)
Discussion started by: moraks007
3 Replies

3. Red Hat

Linux system hangs giving ntp errors

Hi folks, I am facing issue of my system (host1) getting hanged after throwing following ntpd messages. I am not able to ssh to the server there after. only option is to restart the host: Dec 29 02:58:51 host1 ntpd: time reset -0.207907 s Dec 29 02:58:51 host1 ntpd: synchronisation lost Dec 29... (0 Replies)
Discussion started by: SiddhV
0 Replies

4. Shell Programming and Scripting

$0 not giving script name

Why does $0 return the word usage rather than the script name when used in a function? Baffeled on this one, any help appreciated. usage() { echo "$0 -cs <number of batches>\n" echo "$0 -c 4" echo "$0 -s 4" # echo "-c = Create" # echo "-s = Submit\n" exit 1 } $... (1 Reply)
Discussion started by: nhatch
1 Replies

5. AIX

errpt not giving a result

my system get rebooted by its self after its came up i try to check the error log P690/>errpt | more Cannot open error message catalog /usr/lib/nls/msg/en_US/codepoint.cat. The error report will still run, but it will not have explanatory messages P690/>ls -lrt... (1 Reply)
Discussion started by: thecobra151
1 Replies

6. Shell Programming and Scripting

Validating uppercase/lowercase of user input with perl compared to unix folders

Hi, I need to copy files from a source directory to a destination directory in unix. I'm using the file::copy for the actual copy. The problem is that the source and dest directories are supplied by different users, who might type the name of the directories in various combinations of lower... (6 Replies)
Discussion started by: Furou
6 Replies

7. Shell Programming and Scripting

Monitoring Sript giving random end result

Hi Guys, I am developing a script to monitor GUI based FileNet Component "Component Manager" which logs it's running status in a log file. Log file is a huge file so in script I put last 300 lines of log file in seperate file and run script every 5 minutes. I am searching the string... (2 Replies)
Discussion started by: dhirajdsharma
2 Replies

8. Red Hat

Memory conmsumption by Java server is very high on Linux compared to Soalris

Hello All, We have a jave server running on both linux and Solaris environments. On solaris,it consumes only 600-700MB whereas it goes upto 21G in Linux. I am monitoring the memory consumption through top command. Is this high memory consumption expected in Linux? (1 Reply)
Discussion started by: prasperl
1 Replies

9. Shell Programming and Scripting

Grep command giving different result for different users for same command

Hello, I am running below command as root user #nodetool cfstats tests | grep "Memtable switch count" Memtable switch count: 12 Where as when I try to run same command as another user it gives different result. #su -l zabbix -s /bin/bash -c "nodetool cfstats tests | grep "Memtable switch... (10 Replies)
Discussion started by: Pushpraj
10 Replies

10. Shell Programming and Scripting

CUT command not giving correct result inside loop

Hi, i have a source file and have 3 columns and separated by "|" .i want to split this 3 columns in different variable.When i am executing this values indivisually giving correct result but when the same execute inside a for loop,it's giving issues. Src file(jjj.txt) -------... (8 Replies)
Discussion started by: raju2016
8 Replies
Test::Script(3pm)					User Contributed Perl Documentation					 Test::Script(3pm)

NAME
Test::Script - Basic cross-platform tests for scripts DESCRIPTION
The intent of this module is to provide a series of basic tests for 80% of the testing you will need to do for scripts in the script (or bin as is also commonly used) paths of your Perl distribution. Further, it aims to provide this functionality with perfect platform-compatibility, and in a way that is as unobtrusive as possible. That is, if the program works on a platform, then Test::Script should always work on that platform as well. Anything less than 100% is considered unacceptable. In doing so, it is hoped that Test::Script can become a module that you can safely make a dependency of all your modules, without risking that your module won't on some platform because of the dependency. Where a clash exists between wanting more functionality and maintaining platform safety, this module will err on the side of platform safety. FUNCTIONS
script_compiles script_compiles( 'script/foo.pl', 'Main script compiles' ); The "script_compiles" test calls the script with "perl -c script.pl", and checks that it returns without error. The path it should be passed is a relative unix-format script name. This will be localised when running "perl -c" and if the test fails the local name used will be shown in the diagnostic output. Note also that the test will be run with the same perl interpreter that is running the test script (and not with the default system perl). This will also be shown in the diagnostic output on failure. script_runs script_runs( 'script/foo.pl', 'Main script runs' ); The "script_runs" test executes the script with "perl script.pl" and checks that it returns success. The path it should be passed is a relative unix-format script name. This will be localised when running "perl -c" and if the test fails the local name used will be shown in the diagnostic output. The test will be run with the same perl interpreter that is running the test script (and not with the default system perl). This will also be shown in the diagnostic output on failure. SUPPORT
All bugs should be filed via the bug tracker at <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Script> For other issues, or commercial enhancement and support, contact the author. AUTHOR
Adam Kennedy <adamk@cpan.org> SEE ALSO
prove, <http://ali.as/> COPYRIGHT
Copyright 2006 - 2009 Adam Kennedy. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the LICENSE file included with this module. perl v5.10.1 2009-11-24 Test::Script(3pm)
All times are GMT -4. The time now is 03:19 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy