change 2 argument semantics to make more sense
[lnf] / lnf
diff --git a/lnf b/lnf
index fa9b59937108e5b6514cd983d629c3d4f8bfc34b..bf497615a23b7196700cbfc75767b1606762f5e3 100755 (executable)
--- a/lnf
+++ b/lnf
@@ -6,7 +6,9 @@ lnf() {
     local help="lnf [--help] LN_ARGUMENTS...
 Create symlinks conveniently and forcefully.
 Remove existing file/links using trash-put or rm -rf if it is not available.
-Create directory if needed. Finally, ln -s -- LN_ARGUMENTS"
+Create directory if needed. Small change to ln argument semantics: for 2 arguments,
+the second is the link, never a directory to put the link in.
+LN_ARGUMENTS are passed to ln -s --, meaning no ln option arguments are supported."
     if [[ $1 == --help ]]; then
         echo "$help"
         return 0
@@ -19,19 +21,21 @@ Create directory if needed. Finally, ln -s -- LN_ARGUMENTS"
         remove="rm -rf"
     fi
     
-    if [[ $# -ge 3 && ! -d ${!#} ]]; then
-        mkdir -p "${!#}"
-    elif [[ $# -ge 2 && -d ${!#} ]]; then
-        local oldcwd=$PWD
-        cd ${!#} # last arg
-        for x in "${@:1:$(($#-1))}"; do # all but last arg
-            # remove any trailing slashes
-            x="${x%%+(/)}"
-            # remove any leading directory components
-            x="${x##*/}"
-            [[ -e "$x" || -L "$x" ]] && $remove "$x"
-        done
-        cd "$oldcwd"
+    if [[ $# -ge 3 ]]; then
+        if [[ -d ${!#} ]]; then
+            local oldcwd=$PWD
+            cd ${!#} # last arg
+            for x in "${@:1:$(($#-1))}"; do # all but last arg
+                # remove any trailing slashes
+                x="${x%%+(/)}"
+                # remove any leading directory components
+                x="${x##*/}"
+                [[ -e "$x" || -L "$x" ]] && $remove "$x"
+            done
+            cd "$oldcwd"
+        else
+            mkdir -p "${!#}"
+        fi
     elif [[ $# -eq 2 ]]; then
         if [[ -e "$2" || -L "$2" ]]; then
             $remove "$2"