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