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
LOCALE(1)							 Linux User Manual							 LOCALE(1)

NAME
locale - get locale-specific information SYNOPSIS
locale [option] locale [option] -a locale [option] -m locale [option] name... DESCRIPTION
The locale command displays information about the current locale, or all locales, on standard output. When invoked without arguments, locale displays the current locale settings for each locale category (see locale(5)), based on the settings of the environment variables that control the locale (see locale(7)). Values for variables set in the environment are printed without dou- ble quotes, implied values are printed with double quotes. If either the -a or the -m option (or one of their long-format equivalents) is specified, the behavior is as follows: -a, --all-locales Display a list of all available locales. The -v option causes the LC_IDENTIFICATION metadata about each locale to be included in the output. -m, --charmaps Display the available charmaps (character set description files). To display the current character set for the locale, use locale -c charmap. The locale command can also be provided with one or more arguments, which are the names of locale keywords (for example, date_fmt, ctype- class-names, yesexpr, or decimal_point) or locale categories (for example, LC_CTYPE or LC_TIME). For each argument, the following is dis- played: * For a locale keyword, the value of that keyword to be displayed. * For a locale category, the values of all keywords in that category are displayed. When arguments are supplied, the following options are meaningful: -c, --category-name For a category name argument, write the name of the locale category on a separate line preceding the list of keyword values for that category. For a keyword name argument, write the name of the locale category for this keyword on a separate line preceding the keyword value. This option improves readability when multiple name arguments are specified. It can be combined with the -k option. -k, --keyword-name For each keyword whose value is being displayed, include also the name of that keyword, so that the output has the format: keyword="value" The locale command also knows about the following options: -v, --verbose Display additional information for some command-line option and argument combinations. -?, --help Display a summary of command-line options and arguments and exit. --usage Display a short usage message and exit. -V, --version Display the program version and exit. FILES
/usr/lib/locale/locale-archive Usual default locale archive location. /usr/share/i18n/locales Usual default path for locale definition files. CONFORMING TO
POSIX.1-2001, POSIX.1-2008. EXAMPLE
$ locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL= $ locale date_fmt %a %b %e %H:%M:%S %Z %Y $ locale -k date_fmt date_fmt="%a %b %e %H:%M:%S %Z %Y" $ locale -ck date_fmt LC_TIME date_fmt="%a %b %e %H:%M:%S %Z %Y" $ locale LC_TELEPHONE +%c (%a) %l (%a) %l 11 1 UTF-8 $ locale -k LC_TELEPHONE tel_int_fmt="+%c (%a) %l" tel_dom_fmt="(%a) %l" int_select="11" int_prefix="1" telephone-codeset="UTF-8" The following example compiles a custom locale from the ./wrk directory with the localedef(1) utility under the $HOME/.locale directory, then tests the result with the date(1) command, and then sets the environment variables LOCPATH and LANG in the shell profile file so that the custom locale will be used in the subsequent user sessions: $ mkdir -p $HOME/.locale $ I18NPATH=./wrk/ localedef -f UTF-8 -i fi_SE $HOME/.locale/fi_SE.UTF-8 $ LOCPATH=$HOME/.locale LC_ALL=fi_SE.UTF-8 date $ echo "export LOCPATH=$HOME/.locale" >> $HOME/.bashrc $ echo "export LANG=fi_SE.UTF-8" >> $HOME/.bashrc SEE ALSO
localedef(1), charmap(5), locale(5), locale(7) COLOPHON
This page is part of release 4.15 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/. Linux 2017-09-15 LOCALE(1)
All times are GMT -4. The time now is 04:41 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy