[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
- Question about inline code / incompatibility between FreeBSD sh and bash,
Garrett Cooper <=