Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sources DOT redhat DOT com Delivered-To: mailing list cygwin AT sources DOT redhat DOT com Date: Tue, 10 Oct 2000 18:12:38 -0400 Message-Id: <200010102212.SAA13461@envy.delorie.com> From: DJ Delorie To: enolte AT campuspipeline DOT com CC: cygwin AT sources DOT redhat DOT com In-reply-to: <01aa01c03300$0816c360$c4acb018@home.com> (enolte AT campuspipeline DOT com) Subject: Re: getopts missing with latest cygwin References: <1001010201259 DOT AA89692 DOT SM AT nike DOT ins DOT cwru DOT edu> <20001010162948 DOT D5706 AT cygnus DOT com> <01aa01c03300$0816c360$c4acb018 AT home DOT com> > Worse than useless :-) Sigh, I guess I'm just going to have to respond with hard proof, since everyone who's saying "it can't work!" never bothered to find out what that kind of program really does. The purpose of getopt(1) is to accept all the POSIX.1-allowed conventions, and convert them to something trivial to parse in a simple shell context. Of course it can't set environment variables in it's parent's space; *nothing* can do that. It's isn't a 100%-compatible-with-builtin replacement. This example is from Linux's /usr/lib/getopt/parse.bash: #!/bin/bash # A small example program for using the new getopt(1) program. # This program will only work with bash(1) # An similar program using the tcsh(1) script language can be found # as parse.tcsh # Example input and output (from the bash prompt): # ./parse.bash -a par1 'another arg' --c-long 'wow!*\?' -cmore -b " very long " # Option a # Option c, no argument # Option c, argument `more' # Option b, argument ` very long ' # Remaining arguments: # --> `par1' # --> `another arg' # --> `wow!*\?' # Note that we use `"$@"' to let each command-line parameter expand to a # separate word. The quotes around `$@' are essential! # We need TEMP as the `eval set --' would nuke the return value of getopt. TEMP=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \ -n 'example.bash' -- "$@"` if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi # Note the quotes around `$TEMP': they are essential! eval set -- "$TEMP" while true ; do case "$1" in -a|--a-long) echo "Option a" ; shift ;; -b|--b-long) echo "Option b, argument \`$2'" ; shift 2 ;; -c|--c-long) # c has an optional argument. As we are in quoted mode, # an empty parameter will be generated if its optional # argument is not found. case "$2" in "") echo "Option c, no argument"; shift 2 ;; *) echo "Option c, argument \`$2'" ; shift 2 ;; esac ;; --) shift ; break ;; *) echo "Internal error!" ; exit 1 ;; esac done echo "Remaining arguments:" for arg do echo '--> '"\`$arg'" ; done -- Want to unsubscribe from this list? Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com