delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2006/08/29/12:04:19

X-Spam-Check-By: sourceware.org
MIME-Version: 1.0
Subject: RE: Problem when using variable assignment, backticks in shell script
Date: Tue, 29 Aug 2006 12:03:59 -0400
Message-ID: <017630AA6DF2DF4EBC1DD4454F8EE29708D754BA@rsana-ex-hq1.NA.RSA.NET>
In-Reply-To: <Pine.GSO.4.63.0608281721230.10073@access1.cims.nyu.edu>
From: "Silva, Russell" <rsilva AT rsasecurity DOT com>
To: <cygwin AT cygwin DOT com>
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id k7TG4FWM003735

Hi Igor,

I don't know what you mean by the "error string", but the
backtick-output string is always empty.  stderr gives me nothing.  I've
tried the $(COMMAND) syntax as an alternative to the `COMMAND` syntax,
same problem.

The value of $? is always 0 when this problem occurs, even if it should
be a non-zero value.  For instance:

<bug_reproduce3.sh>
#!/bin/bash
# make 1000 attempts to reproduce the bug
for i in `seq 1 1000`
do
  # ls should return incorrect usage = error code 2
  x=$(ls -j 2>&1);
  # if the bug has occurred
  if [[ $x == "" ]]
  then
    # this outputs 0, but "incorrect usage" ls should (and does) return
2
    echo $?
  fi
done
</bug_reproduce3.sh>

When the bug occurs, causing $x to be empty, the value of $? is 0 when
it should be 2.  ls -j is incorrect usage of ls (i.e., the -j option
does not exist) and should return 2.  This can be verified easily:

$ ls -asdfghjkl
ls: invalid option -- j
Try `ls --help' for more information.

$ echo $?
2

Regards,

Russell Silva


-----Original Message-----
From: Igor Peshansky [mailto:pechtcha AT cs DOT nyu DOT edu] 
Sent: Monday, August 28, 2006 5:25 PM
To: Silva, Russell
Cc: cygwin AT cygwin DOT com
Subject: Re: Problem when using variable assignment, backticks in shell
script

On Mon, 28 Aug 2006, Silva, Russell wrote:

> I am having a problem using Cygwin, variable assignment, and backticks
> when shell scripting.  Occasionally, variables assigned using a
> backticked expression are not properly assigned; they are left empty.
> The problem appears to be non-deterministic.
>
> For instance, take this script:
> [snip <bug_reproduce.sh>]
>
> A few times out of the 1000 possible, the error code is reached:
>
> $ ./bug_reproduce.sh
> error attempt 245: "" is not the correct string "liars"

Is the error string always empty?  That would indicate to me that bash
somehow failed to launch the child process...  FWIW, bash retains the
exit code of the launched program in $? after a backtick assignment --
try
printing that out and see if there is a correlation.  Also, check the
output on stderr -- perhaps there's an error message printed?
	Igor
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_	    pechtcha AT cs DOT nyu DOT edu |
igor AT watson DOT ibm DOT com
ZZZzz /,`.-'`'    -.  ;-;;,_		Igor Peshansky, Ph.D. (name
changed!)
     |,4-  ) )-,_. ,\ (  `'-'		old name: Igor Pechtchanski
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

"Las! je suis sot... -Mais non, tu ne l'es pas, puisque tu t'en rends
compte."
"But no -- you are no fool; you call yourself a fool, there's proof
enough in
that!" -- Rostand, "Cyrano de Bergerac"

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019