variable scope bug and condition on new file
authorIan Kelling <ian@iankelling.org>
Tue, 29 Jul 2014 00:40:11 +0000 (17:40 -0700)
committerIan Kelling <ian@iankelling.org>
Tue, 29 Jul 2014 00:40:11 +0000 (17:40 -0700)
appendu
appendu-function

diff --git a/appendu b/appendu
index b613353af65fcd5eef8a3fd0c61491f4997ce6d2..792ffce882618a8c2d96d702425f7175301f3644 100755 (executable)
--- 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
index 37c7b1e9635a271cd68b083d0b40794493df4b45..a0fdc5d6e0c1b5b73e25a1dc3d87d4766b655626 100644 (file)
@@ -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