Re: Patch to pg_ctl to better support paths containing - Mailing list pgsql-patches

From Peter Eisentraut
Subject Re: Patch to pg_ctl to better support paths containing
Date
Msg-id Pine.LNX.4.30.0109201505310.684-100000@peter.localdomain
Whole thread Raw
In response to Patch to pg_ctl to better support paths containing spaces  (Barry Lind <barry@xythos.com>)
Responses Re: Patch to pg_ctl to better support paths containing  (Bruce Momjian <pgman@candle.pha.pa.us>)
Re: Patch to pg_ctl to better support paths containing  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-patches
Barry Lind writes:

> Attached is a set of changes to pg_ctl that I have been using that fixes
> problems I have had with pg_ctl when the paths contains spaces.

> ! CMDNAME=`basename "$0"`

OK.

>   else
>           # look for it in PATH ('which' command is not portable)
> !         for dir in `echo "$PATH" | sed 's/ /\\\_/g' | sed 's/:/ /g'`
>       do
> +                 dir="`echo $dir | sed 's/\\\_/ /g'`"
>                   # empty entry in path means current dir
>                   [ -z "$dir" ] && dir='.'

Probably better to do this with IFS.  Btw., this piece of code exists in
identical form in most other PostgreSQL shell scripts.  Do you intend to
fix those as well?

> ! DEFPOSTOPTS="$PGDATA/postmaster.opts.default"
> ! POSTOPTSFILE="$PGDATA/postmaster.opts"
> ! PIDFILE="$PGDATA/postmaster.pid"

This is not necessary.

>   if [ "$op" = "status" ];then
> !     if [ -f "$PIDFILE" ];then
> !     PID=`sed -n 1p "$PIDFILE"`
>       if [ $PID -lt 0 ];then

... more similar stuff OK ...

>       else
>           # if we are in restart mode, then look for postmaster.opts
> !         eval set X "`cat "$POSTOPTSFILE"`"; shift
>               po_path="$1"

That is not portable.  There is no portable way to have double quotes
within backticks within double quotes.  You might be able to do something
along the lines of

    foo=`cat "$POSTOPTSFILE"`
    eval set X "$foo"; shift

The expression in question was carefully engineered to handle single
quotes and spaces in the POSTOPTSFILE correctly, so be careful. ;-)

>       if [ -n "$oldpid" ];then
>       sleep 1
> !     if [ -f "$PIDFILE" ];then
> !         if [ "`sed -n 1p "$PIDFILE"`" = "$oldpid" ];then
>           echo "$CMDNAME: cannot start postmaster" 1>&2
>           echo "Examine the log output." 1>&2

Same problem here.

--
Peter Eisentraut   peter_e@gmx.net   http://funkturm.homeip.net/~peter


pgsql-patches by date:

Previous
From: Barry Lind
Date:
Subject: Patch to pg_ctl to better support paths containing spaces
Next
From: Gavin Sherry
Date:
Subject: CREATE OR REPLACE FUNCTION