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"
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,
# so sed only does what it always does when it was supposed to modify a file,
# which is append a newline if there was none.
- sed -ie '$a\' "$file"
+ sed -i '$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.
fi
fi
done
+ $reset_extglob && shopt -u extglob
return 0
}