From: Ian Kelling Date: Tue, 29 Jul 2014 00:40:11 +0000 (-0700) Subject: variable scope bug and condition on new file X-Git-Url: https://iankelling.org/git/?p=tee-unique;a=commitdiff_plain;h=1a845d1b8d9e48872cdbf3c6360db52b70b6479a variable scope bug and condition on new file --- diff --git a/appendu b/appendu index b613353..792ffce 100755 --- a/appendu +++ b/appendu @@ -57,7 +57,8 @@ LINE_SETs are treated the same. return 1 fi fi - + + local strings if (( $# == 0 )); then unset IFS while read -r x; do @@ -67,15 +68,17 @@ LINE_SETs are treated the same. strings=( "$@" ) fi - # 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" - # command substitution removes any trailing newlines, so we have to add - # a non-newline ending, we randomly chose "b", then remove it. - content=$(cat "$file"; echo b) content=${content%b} + 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" + # 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} + fi # 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, @@ -85,7 +88,7 @@ LINE_SETs are treated the same. )" local end=" *" - local return_code + local return_code string return_code for string in "${strings[@]}"; do if $new_file || [[ $content != $start"$string"$end ]]; then if ! tee -a "$file"<<<"$string"; then diff --git a/appendu-function b/appendu-function index 37c7b1e..a0fdc5d 100644 --- a/appendu-function +++ b/appendu-function @@ -57,7 +57,8 @@ LINE_SETs are treated the same. return 1 fi fi - + + local strings if (( $# == 0 )); then unset IFS while read -r x; do @@ -67,15 +68,17 @@ LINE_SETs are treated the same. strings=( "$@" ) fi - # 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" - # command substitution removes any trailing newlines, so we have to add - # a non-newline ending, we randomly chose "b", then remove it. - content=$(cat "$file"; echo b) content=${content%b} + 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" + # 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} + fi # 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, @@ -85,7 +88,7 @@ LINE_SETs are treated the same. )" local end=" *" - local return_code + local return_code string return_code for string in "${strings[@]}"; do if $new_file || [[ $content != $start"$string"$end ]]; then if ! tee -a "$file"<<<"$string"; then