update license notice
[tee-unique] / teeu
diff --git a/teeu b/teeu
index 948169dbffdd190d66a2cb502ec0807800ef4012..9daedb77b836460799b17513a02bdee1130dff0e 100755 (executable)
--- a/teeu
+++ b/teeu
@@ -1,29 +1,56 @@
 #!/bin/bash
-# Copyright (C) 2014 Ian Kelling
-# This program is under GPL v. 3 or later, see <http://www.gnu.org/licenses/>
+# I, Ian Kelling, follow the GNU license recommendations at
+# https://www.gnu.org/licenses/license-recommendations.en.html. They
+# recommend that small programs, < 300 lines, be licensed under the
+# Apache License 2.0. This file contains or is part of one or more small
+# programs. If a small program grows beyond 300 lines, I plan to switch
+# its license to GPL.
+
+# Copyright 2024 Ian Kelling
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+#     http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 
 teeu() {
-    local help="Usage: appendu [-h|--help] FILE [LINE]
-
-Tee unique. Append each LINE or if none, each stdin line to FILE if it does not exist in FILE.
-
-  [-h|--help]  display this message"
-
-    if [[ $1 == --help || $1 == -h ]]; then
-        echo "$help"
-        return
-    fi
-
-    if (( ${#@} == 0 )) ; then
-        echo "teeu error: need 1 or more arguments"
-        echo "$help"
-        return 1
-    fi
-    local MAPFILE
-    (( ${#@} >= 2 )) && MAPFILE="${@:2}" || mapfile -t
-    for line in "${MAPFILE[@]}"; do
-        grep -xFq "$line" "$1" &>/dev/null || tee -a "$1" <<<"$line"
-    done
-    return 0
+  local help="Usage: teeu [-h|--help] FILE [LINE]
+Append LINE if it's not already in FILE
+
+If no LINE is specified, process each line from STDIN.
+teeu is short for tee unique.
+
+-h|--help  display this message"
+
+  if [[ $1 == --help || $1 == -h ]]; then
+    echo "$help"
+    return
+  fi
+
+  if (( ${#@} == 0 )) ; then
+    echo "teeu error: need 1 or more arguments"
+    echo "$help"
+    return 1
+  fi
+  file="$1"
+  shift
+  local MAPFILE
+  if [[ $1 ]]; then
+    MAPFILE=("$*")
+  else
+    mapfile -t
+  fi
+  for line in "${MAPFILE[@]}"; do
+    grep -xFq "$line" "$file" &>/dev/null || tee -a "$file" <<<"$line"
+  done
+  return 0
 }
 teeu "$@"