Symbolic Links for Lunks (Re-Thunk)

karron at MCIRPS2.MED.NYU.EDU karron at MCIRPS2.MED.NYU.EDU
Fri Aug 10 05:45:26 AEST 1990


There was a problem with creating links from outside your current working
directory that I think I fixed in this version of the script, and a bug in
file existance testing ( [ -x ] for [ -f ] ) that would not let you link to a
nonexecutable file.

I think that this works.  While not the most artful shell script, This is what
I use to protect myself from some of the problems with symbolic links.

It has been pointed out to me that ln -si will prevent you from clobbering
a file with a link too. Then my only improvement is that this script
checks for existance of files to link to and qualifies file paths
relative to root so that you can't get a dangling link (a linkage to a
file that does not exist because it is being evaluated relative to some
arbitrary current working location).

Thanks for all your input, and I hope that this works better.
---------cut here--------------------------------------------------------------
#! /bin/sh
# more user frendly front end for ln -s
# prevents you from making linkages the wrong way and clobbering what
# you want to LINK to.
#
# fully qualifies FILE and LINK names so you
#   don't get dangling linkages.

clear
#. Version.mac
FILE="$1"

        if echo $FILE | egrep -s "^/"
        then
        echo "File name is fully qualified"
        else
        echo "File name being qualified"
        FILE_DIR_NAME=`dirname $FILE`
        FILE="`(cd $FILE_DIR_NAME;pwd)`/`basename $FILE`"
        fi

echo "Enter existing file you wish create a link to"

        if [ "$1" ]
        then
        echo "or enter a return to use $FILE"
        fi

read FILE

        if [ -z "$FILE" ]
        then
        FILE=$1
        fi

        if echo $FILE | egrep -s "^/"
        then
        echo "File name is fully qualified"
        else
        echo "File name being qualified"
        FILE_DIR_NAME=`dirname $FILE`
        FILE="`(cd $FILE_DIR_NAME;pwd)`/`basename $FILE`"
        fi

        if [ -f $FILE ]
        then
        echo "GOOD. $FILE exists"
        ls -ld $FILE
        else
        echo "$FILE does not exist"
        echo " How do you expect me to make a link to a file I can't find."
        exit 1
        fi

echo "\n\n"
LINK="$2"

        if echo $LINK | egrep -s "^/"
        then
        echo "Link name is fully qualified"
        else
        echo "Link name being qualified"
        LINK_DIR_NAME=`dirname $LINK`
        LINK="`(cd $LINK_DIR_NAME;pwd)`/`basename $LINK`"
        fi

echo "Enter name of link to create $LINK"

        if [ -z "$2" ]
        then
        echo "or return to use `basename $FILE`"
        fi

read LINK

        if [ -z "$LINK" ]
        then
        LINK=$2
        fi

        if echo $LINK | egrep -s "^/"
        then
        echo "Link name is fully qualified"
        else
        echo "Link name being qualified"
        LINK_DIR_NAME=`dirname $LINK`
        LINK="`(cd $LINK_DIR_NAME;pwd)`/`basename $LINK`"
        fi

        if [ -z "$LINK" ]
        then
        LINK=`basename $FILE`
        echo "do you want me to use $LINK as your local LINK to \n$FILE ?"
        echo "\nReturn to continue,anything else aborts."
        read ans
                if [ -n "$ans" ]
                then
                exit 1
                fi
        fi

        if [ -f $LINK ]
        then
        echo "bad bad bad boy, $LINK exists. If you don't believe me, look"
        ls -ld $LINK
        exit 1
        else
        echo "nice kitty"
        echo " $LINK is ready to create"
        fi

ln -s $FILE $LINK
echo "\n\n"
ls -ld $FILE $LINK | cut -c1-10,40-

echo "$0 : Completed"
# . End.mac
exit 0


+-----------------------------------------------------------------------------+
| karron at nyu.edu                          Dan Karron                          |
| . . . . . . . . . . . . . .             New York University Medical Center  |
| 560 First Avenue           \ \    Pager <1> (212) 397 9330                  |
| New York, New York 10016    \**\        <2> 10896   <3> <your-number-here>  |
| (212) 340 5210               \**\__________________________________________ |
+-----------------------------------------------------------------------------+



More information about the Comp.sys.sgi mailing list