link() {
# Get all necessary paths.
pwd=`pwd`
- base=`dirname "$2"`
+ base=`echo "$2" | sed "s|\~|$HOME|"` # expand ~, some sh don't do it
+ base=`dirname "$base"`
source=`echo "$pwd/$1" | sed "s|$base/||"`
target=`basename "$2"`
# Abort if the target file exists and is no symbolic link. Prevents
# overwriting real files.
- if [ -e "$target" -a ! -h "$target" ]; then
+ if [ \( -f "$target" -a ! -h "$target" \) -o \
+ \( -s "$target" -a ! -h "$target" \) ]; then
echo "link(): target '$target' exists already and is no symbolic link!" >&2
exit 1
fi
- # Make sure the source exists.
- if [ ! -e "$source" ]; then
+ # Make sure the source exists (is file, directory or link).
+ if [ ! -f "$source" -a ! -d "$source" -a ! -h "$source" ]; then
echo "link(): source '$source' doesn't exist!" >&2
exit 1
fi