From: Ian Kelling Date: Tue, 17 Jun 2014 05:36:37 +0000 (-0700) Subject: add pipe input X-Git-Url: https://iankelling.org/git/?p=tee-unique;a=commitdiff_plain;h=7ca836a05e81aeac0758b10d220e4b618c854ea8 add pipe input --- 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 }