X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=appendu-function;h=13a7d740cd51548714ce6ff28730af2a495a3ada;hb=dc0386f28d2e917f8a5a81ff66bcd26d3b029e42;hp=a0fdc5d6e0c1b5b73e25a1dc3d87d4766b655626;hpb=1a845d1b8d9e48872cdbf3c6360db52b70b6479a;p=tee-unique diff --git a/appendu-function b/appendu-function index a0fdc5d..13a7d74 100644 --- a/appendu-function +++ b/appendu-function @@ -47,6 +47,17 @@ LINE_SETs are treated the same. return 1 fi fi + + local strings line + if (( $# == 0 )); then + unset IFS + while read -r line; do + strings+=( "$line" ) + done + else + strings=( "$@" ) + fi + if ! $new_file; then if [[ ! -r $file ]]; then echo "appendu error: cannot read or write $file" @@ -56,19 +67,6 @@ LINE_SETs are treated the same. echo "appendu error: cannot read or write $file" return 1 fi - fi - - local strings - if (( $# == 0 )); then - unset IFS - while read -r x; do - strings+=( "$x" ) - done - else - strings=( "$@" ) - fi - - if $new_file; then # fix files with no newline at the end. # the following command won't work right on them otherwise. # e = run script, $a\ means append following text, but there is none, @@ -77,9 +75,13 @@ LINE_SETs are treated the same. sed -ie '$a\' "$file" # command substitution removes any trailing newlines, so we have to add # a non-newline ending, we randomly chose "b", then remove it. - local content=$(cat "$file"; echo b) content=${content%b} + local content=$(cat "$file"; echo b) + content=${content%b} fi + local reset_extglob=false + ! shopt extglob >/dev/null && reset_extglob=true + shopt -s extglob # we aren't using regex because we want to match strings, # but we also want our match to start at the beginning of a line, # or the beginning of the file, and to end at a line ending. @@ -98,5 +100,6 @@ LINE_SETs are treated the same. fi fi done + $reset_extglob && shopt -u extglob return 0 }