Browse Source
Eliminate bashisms; target the Bourne shell and a safer subset of POSIX utilities. Furthermore, properly handle pathnames with whitespace.pull/28/head
1 changed files with 23 additions and 16 deletions
@ -1,19 +1,26 @@ |
|||
#!/bin/bash |
|||
# This script emulates the cp -s command, which Mac OS doesn't support. |
|||
#!/bin/sh |
|||
# Emulate cp -s for systems without coreutils |
|||
|
|||
set -e |
|||
if test -z "$1" || test -z "$2" ; then |
|||
echo "usage: ${0} srcdir destdir" >&2 |
|||
exit 1 |
|||
fi |
|||
|
|||
pushd $1 > /dev/null |
|||
SRCDIR=`pwd` |
|||
DIRS=`find . -type d` |
|||
FILES=`find . -type f` |
|||
popd > /dev/null |
|||
# Portability notes: |
|||
# - Avoid set -e given its ambiguous interaction with subshells. |
|||
# - Not all shells update $PWD as required by POSIX. |
|||
# Use the pwd builtin instead. |
|||
# - Command substitution strips all trailing newlines. |
|||
# Preserve trailing newlines by appending a safety character and then |
|||
# removing it with parameter substitution, along with the newline |
|||
# appended by pwd itself. |
|||
|
|||
pushd $2 > /dev/null |
|||
for i in $DIRS; do |
|||
mkdir -p $i |
|||
done |
|||
for i in $FILES; do |
|||
ln -f -s $SRCDIR/$i $i |
|||
done |
|||
popd > /dev/null |
|||
mkdir -p "$2" && |
|||
destdir=`cd "$2" && pwd && echo x` && |
|||
destdir=${destdir%??} && |
|||
|
|||
cd "$1" && |
|||
srcdir=`pwd && echo x` && |
|||
srcdir=${srcdir%??} && |
|||
find . -type d -exec mkdir -p "${destdir}/{}" \; && |
|||
find . -type f -exec ln -sf "${srcdir}/{}" "${destdir}/{}" \; |
|||
|
|||
Loading…
Reference in new issue