From: Ian Kelling Date: Thu, 5 Feb 2026 23:04:00 +0000 (-0500) Subject: rename to more logical name. symlink old name cuz it could break stuff X-Git-Url: https://iankelling.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Fmaster;p=tee-unique rename to more logical name. symlink old name cuz it could break stuff --- diff --git a/appu b/appu new file mode 100755 index 0000000..6c97ba1 --- /dev/null +++ b/appu @@ -0,0 +1,79 @@ +#!/bin/bash +# 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. + + +appu() { + local help="Usage: appu [-h|--help|-v] FILE [LINE] +Append unique: Appends line(s) to FILE if they are not already in FILE. + +If no LINE is specified, process each line from STDIN. + +Appu is like ainsl, but with plain verbatim strings and no automatic +escaping. + +-v verbose. Prints each line added to the file. +-h|--help display this message +" + local verbose=false + + if ! temp=$(getopt -l help: hv "$@"); then + echo "appu: unexpected options." + echo "$help" + return 1 + fi + eval set -- "$temp" + while true; do + case $1 in + -v[) verbose=true ;; + -h|--help) + echo "$help" + return 0 + ;; + --) shift; break ;; + *) echo "$0: Internal error! unexpected args: $*" ; return 1 ;; + esac + shift + done + + if (( ${#@} == 0 )) ; then + echo "appu 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 + if $verbose; then + grep -xFq "$line" "$file" &>/dev/null || tee -a "$file" <<<"$line" + else + grep -xFq "$line" "$file" &>/dev/null || printf "%s\n" "$line" >>"$file" + fi + done + return 0 +} +appu "$@" diff --git a/teeu b/teeu deleted file mode 100755 index 9daedb7..0000000 --- a/teeu +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -# 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: 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 "$@" diff --git a/teeu b/teeu new file mode 120000 index 0000000..b0fdd81 --- /dev/null +++ b/teeu @@ -0,0 +1 @@ +appu \ No newline at end of file