Sebastian Nowicki wrote:
> On 22/05/2008, at 1:13 AM, Xavier wrote:
>
>> It is not eval, it is set. As far as I can tell, it is perfectly
>> normal,
>> that call seems to be made exactly for that purpose: changing the args
>> ($@, $1, etc). And I get the same behavior here anyway.
>
> I see. After some playing around it seems that this version of getopt
> simply doesn't support any parameters. Using "getopt abc $@" works
> fine. When running the test script with "-a -b -c", $@ becomes "-a -b -
> c --". If "getopt -o abs $@" is used, $@ becomes "-- abc -a -b -c", in
> which case makepkg would immediately break out of the loop.
>
>> $ cat test.sh
>> #!/bin/bash
>> echo "[EMAIL PROTECTED]@"
>> args=$(getopt abc $@)
>> if [ $? != 0 ]; then
>> echo "Invalid arguments"
>> exit 1
>> fi
>> eval set -- $args
>> echo "[EMAIL PROTECTED]@"
>> while true; do
>> case "$1" in
>> -a|-b|-c)
>> echo "Got $1"; shift;;
>> *)
>> echo "Invalid: $1"; break;;
>> esac
>> done
>>
>> $ ./test.sh -a -b -c
>> [EMAIL PROTECTED] -b -c
>> [EMAIL PROTECTED] -b -c --
>> Got -a
>> Got -b
>> Got -c
>> Invalid: --
>
> After changing "getopt abc $@" to "getopt -o abc $@":
>> $ ./test.sh -a -b -c
>> [EMAIL PROTECTED] -b -c
>> [EMAIL PROTECTED] abc -a -b -c
> Invalid: --
>
Because you need to use -- to separate the getopt options from the
argument, this is all in the manpage actually, I just figured that :)
getopt -o abc -- $@"
That is what makepkg does.
man getopt:
The parameters getopt is called with can be
divided into two parts: options which modify
the way getopt will parse (options and
-o|--options optstring in the SYNOPSIS), and
the parameters which are to be parsed (parame‐
ters in the SYNOPSIS). The second part will
start at the first non-option parameter that
is not an option argument, or after the first
occurrence of ‘--'. If no ‘-o' or ‘--options'
option is found in the first part, the first
parameter of the second part is used as the
short options string.
If the environment variable GETOPT_COMPATIBLE
is set, or if its first parameter is not an
option (does not start with a ‘-', this is the
first format in the SYNOPSIS), getopt will
generate output that is compatible with that
of other versions of getopt(1). It will still
do parameter shuffling and recognize optional
arguments (see section COMPATIBILITY for more
information).
Actually I am confused. If we want to use that compatible format, getopt
abc $@, then we can't use long options anymore?
_______________________________________________
pacman-dev mailing list
[email protected]
http://archlinux.org/mailman/listinfo/pacman-dev