[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