#!/bin/bash
-# Copyright (C) 2016 Ian Kelling
+# 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.
# See the License for the specific language governing permissions and
# limitations under the License.
+
teeu() {
- local help="Usage: teeu [-h|--help] FILE [LINE]
+ 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.
-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
+ 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 "$@"