-- stop processing arguments
--help display this message"
- local readsudo writesudo x strings string
+ local readsudo writesudo x strings string content
local dosudo=true
while true; do
local file="$1"
shift
- local readsudo=false
local file_exists=false
if [[ -e $file ]]; then
file_exists=true
- [[ -r $file ]] || readsudo=true
+ [[ -r $file ]] || readsudo=sudo
[[ -w $file ]] || writesudo=sudo
else
local dir="$(dirname "$file")"
# 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"
- # this removes any trailing newline in the var, so we add it back on,
- # because we want a consistent ending to match
- local file_content
- if $readsudo; then
- file_content="$(sudo cat "$file")
-"
- else
- file_content="$(<"$file")
-"
- fi
+ # 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.
local end="
*"
for string in "${strings[@]}"; do
- [[ $file_content != $start"$string"$end ]] && $writesudo tee -a "$file"<<<"$string"
+ [[ $content != $start"$string"$end ]] && $writesudo tee -a "$file"<<<"$string"
done
else
for string in "${strings[@]}"; do
-- stop processing arguments
--help display this message"
- local readsudo writesudo x strings string
+ local readsudo writesudo x strings string content
local dosudo=true
while true; do
local file="$1"
shift
- local readsudo=false
local file_exists=false
if [[ -e $file ]]; then
file_exists=true
- [[ -r $file ]] || readsudo=true
+ [[ -r $file ]] || readsudo=sudo
[[ -w $file ]] || writesudo=sudo
else
local dir="$(dirname "$file")"
# 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"
- # this removes any trailing newline in the var, so we add it back on,
- # because we want a consistent ending to match
- local file_content
- if $readsudo; then
- file_content="$(sudo cat "$file")
-"
- else
- file_content="$(<"$file")
-"
- fi
+ # 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.
local end="
*"
for string in "${strings[@]}"; do
- [[ $file_content != $start"$string"$end ]] && $writesudo tee -a "$file"<<<"$string"
+ [[ $content != $start"$string"$end ]] && $writesudo tee -a "$file"<<<"$string"
done
else
for string in "${strings[@]}"; do