bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Question about inline code / incompatibility between FreeBSD sh and


From: Garrett Cooper
Subject: Re: Question about inline code / incompatibility between FreeBSD sh and bash
Date: Thu, 19 Jun 2008 02:29:57 -0700

On Thu, Jun 19, 2008 at 2:12 AM, Garrett Cooper <yanegomi@gmail.com> wrote:
> Hi,
>     Sorry for emailing this list, but neither the GNU indexed
> homepage nor the actual project page listed any other email address.
>     I'm trying to determine whether or not this is an implicit bug or
> a feature of BSD bourne shell (in particular FreeBSD's sh):
>     When I try and execute `portsnap fetch update' [1], things go
> through as the author intended. However, using `bash portsnap fetch
> update' I get the following error message:
>
> /usr/sbin/portsnap: portsnap: line 882: syntax error near unexpected
> token `newline'
> /usr/sbin/portsnap: portsnap: line 882: `       if !'
>
>     The incompatible section of code (at least the one that bash
> barfs on -- I say that because there are a few similar sections IIRC)
> is:
>
>        if !
>                if ! [ -z "${EXTRACTPATH}" ]; then
>                        grep "^${EXTRACTPATH}" ${WORKDIR}/INDEX
>                elif ! [ -z "${REFUSE}" ]; then
>                        grep -vE "${REFUSE}" ${WORKDIR}/INDEX
>                else
>                        cat ${WORKDIR}/INDEX
>                fi | tr '|' ' ' | while read FILE HASH; do
>                echo ${PORTSDIR}/${FILE}
>                if ! [ -r "${WORKDIR}/files/${HASH}.gz" ]; then
>                        echo "files/${HASH}.gz not found -- snapshot corrupt."
>                        return 1
>                fi
>                case ${FILE} in
>                */)
>                        rm -rf ${PORTSDIR}/${FILE%/}
>                        mkdir -p ${PORTSDIR}/${FILE}
>                        tar -xzf ${WORKDIR}/files/${HASH}.gz    \
>                            -C ${PORTSDIR}/${FILE}
>                        ;;
>                *)
>                        rm -f ${PORTSDIR}/${FILE}
>                        tar -xzf ${WORKDIR}/files/${HASH}.gz    \
>                            -C ${PORTSDIR} ${FILE}
>                        ;;
>                esac
>        done; then
>
>    I'm pretty sure that the issue is because the code spans multiple
> lines and could be (typically) modularized out into a function in
> bash.
>    So the question is, can anyone verify that either bash or
> FreeBSD's sh is correct, and/or verify whether or not there is a
> possible incompatibility with the POSIX spec for bourne shells in
> either camp?
> Thanks,
> -Garrett
>
> PS Please CC me as I'm not subscribed to bug-bash@gnu.org.
>
> [1] A copy of portsnap can be found here:
> http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.sbin/portsnap/portsnap/portsnap.sh?rev=1.28;content-type=text%2Fplain

When I take the above code, combine remove the newline and make it into ...

    if ! if ! [ -z "${EXTRACTPATH}" ]; then

... as well as line 951, the script is parsed properly.

The "problem" is reported at parse.y:3071, but I'm unsure how to trace
back the issue through the yacc code.

-Garrett




reply via email to

[Prev in Thread] Current Thread [Next in Thread]