bug-bash
[Top][All Lists]
Advanced

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

Question about inline code / incompatibility between FreeBSD sh and bash


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

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




reply via email to

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