+
+ if (( $# == 0 )); then
+ unset IFS
+ while read -r x; do
+ strings+=( "$x" )
+ done
+ else
+ strings=( "$@" )
+ fi
+
+ if $file_exists; then
+ # fix files with no newline at the end.
+ # the following command won't work right on them.
+ # 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"
+ # command substitution removes any trailing newlines, so we have to add
+ # a non-newline ending, we randomly chose "b", then remove it.
+ content=$($readsudo cat "$file"; echo b) content=${content%b}
+
+ # 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.
+ # So we do some slick bash to match this.
+ local start="?(*
+)"
+ local end="
+*"
+ for string in "${strings[@]}"; do
+ [[ $content != $start"$string"$end ]] && $writesudo tee -a "$file"<<<"$string"
+ done
+ else
+ for string in "${strings[@]}"; do
+ $writesudo tee -a "$file"<<<"${strings[@]}"
+ done
+ fi
+ return 0