From 7ca836a05e81aeac0758b10d220e4b618c854ea8 Mon Sep 17 00:00:00 2001 From: Ian Kelling Date: Mon, 16 Jun 2014 22:36:37 -0700 Subject: [PATCH] add pipe input --- appendu | 24 +++++++++++++++++------- appendu-function | 24 +++++++++++++++++------- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/appendu b/appendu index f08a45c..c7455dc 100755 --- a/appendu +++ b/appendu @@ -3,8 +3,10 @@ # This program is under GPL v. 3 or later, see appendu() { - local help="Usage: appendu [OPTION]... FILE LINE... -Append unique. Append each LINE to FILE if it does not exist in FILE. + local help="Usage: appendu [OPTION]... FILE [LINE]... +Append unique. +Append each line to FILE if it does not exist in FILE. +Use LINE if specified, else use lines from stdin. Appended lines are output to the terminal. -s don't try to use sudo when it would help us read or write the file @@ -28,8 +30,8 @@ Appended lines are output to the terminal. fi done - if (( ${#@} < 2 )); then - echo "error: need 2 or more arguments" + if [[ ${#@} == 0 ]]; then + echo "error: need 1 or more arguments" echo "$help" return 1 fi @@ -54,8 +56,16 @@ Appended lines are output to the terminal. readsudo= writesudo= fi - for x in "$@"; do - [[ -e "$file" ]] && $readsudo grep -q "^$x$" "$file" || $writesudo tee -a "$file"<<<"$x" - done + if [[ $@ ]]; then + for x in "$@"; do + [[ -e "$file" ]] && $readsudo grep -q "^$x$" "$file" || $writesudo tee -a "$file"<<<"$x" + done + elif [[ ! -t 0 ]]; then + unset IFS + while read -r x; do + # duplicated from above + [[ -e "$file" ]] && $readsudo grep -q "^$x$" "$file" || $writesudo tee -a "$file"<<<"$x" + done + fi } appendu "$@" diff --git a/appendu-function b/appendu-function index 7a11f28..40a4edf 100644 --- a/appendu-function +++ b/appendu-function @@ -3,8 +3,10 @@ # This program is under GPL v. 3 or later, see appendu() { - local help="Usage: appendu [OPTION]... FILE LINE... -Append unique. Append each LINE to FILE if it does not exist in FILE. + local help="Usage: appendu [OPTION]... FILE [LINE]... +Append unique. +Append each line to FILE if it does not exist in FILE. +Use LINE if specified, else use lines from stdin. Appended lines are output to the terminal. -s don't try to use sudo when it would help us read or write the file @@ -28,8 +30,8 @@ Appended lines are output to the terminal. fi done - if (( ${#@} < 2 )); then - echo "error: need 2 or more arguments" + if [[ ${#@} == 0 ]]; then + echo "error: need 1 or more arguments" echo "$help" return 1 fi @@ -54,7 +56,15 @@ Appended lines are output to the terminal. readsudo= writesudo= fi - for x in "$@"; do - [[ -e "$file" ]] && $readsudo grep -q "^$x$" "$file" || $writesudo tee -a "$file"<<<"$x" - done + if [[ $@ ]]; then + for x in "$@"; do + [[ -e "$file" ]] && $readsudo grep -q "^$x$" "$file" || $writesudo tee -a "$file"<<<"$x" + done + elif [[ ! -t 0 ]]; then + unset IFS + while read -r x; do + # duplicated from above + [[ -e "$file" ]] && $readsudo grep -q "^$x$" "$file" || $writesudo tee -a "$file"<<<"$x" + done + fi } -- 2.30.2