The command-line argument parsing in pg_ctl is not portable.  This is the 
output on a glibc system:

$ pg_ctl start stop
pg_ctl: too many command-line arguments (first is "start")

But:

$ POSIXLY_CORRECT=1 pg_ctl start stop
pg_ctl: too many command-line arguments (first is "stop")

This is probably because GNU getopt rearranges the arguments, and since pg_ctl 
uses two while loops to try to allow non-option arguments before options, 
things may get reordered multiple times.

Now this particular case is minor trouble, but I wonder in what other 
situations arguments will get reordered where the order does make a 
difference.

-- 
Peter Eisentraut
http://developer.postgresql.org/~petere/

Tue, 19 Oct 2004 15:50:37 +0200
Peter Eisentraut <peter_e@gmx.net>
Command-line parsing in pg_ctl is not portable
Peter Eisentraut wrote:
> The command-line argument parsing in pg_ctl is not portable.  This is the 
> output on a glibc system:
> 
> $ pg_ctl start stop
> pg_ctl: too many command-line arguments (first is "start")
> 
> But:
> 
> $ POSIXLY_CORRECT=1 pg_ctl start stop
> pg_ctl: too many command-line arguments (first is "stop")
> 
> This is probably because GNU getopt rearranges the arguments, and since pg_ctl 
> uses two while loops to try to allow non-option arguments before options, 
> things may get reordered multiple times.
> 
> Now this particular case is minor trouble, but I wonder in what other 
> situations arguments will get reordered where the order does make a 
> difference.

Yea, I found that GNU getopt reordering thing to be very strange.  I can
imagine some risks to such reordering.  Fortunately we don't have any
other commands where we have to do this weird double-calls.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Tue, 26 Oct 2004 00:00:33 -0400 (EDT)
Bruce Momjian <pgman@candle.pha.pa.us>
Re: Command-line parsing in pg_ctl is not portable