Vuoi migliorare questa domanda? Aggiorna la domanda in modo da poterla rispondere con fatti e citazioni modificando questo post.
Chiuso 7 anni fa.
Migliora questa domanda
Supponiamo che tu abbia il seguente problema:
A seconda che uno script venga eseguito o meno all'interno di una pipe, vuoi aggiungere il -print0
parametro da find
.
Mi vengono in mente almeno due modi per farlo:
[[ -p '/dev/stdin' ]] && local null_terminated='-print0'
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "$null_terminated"
Oppure
if [[ -p '/dev/stdin' ]]; then
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) -print0
else
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" )
fi
C'è un modo migliore per farlo? La domanda è per bash
, ma soluzioni per altre shell o sh
portatili/standard anche le soluzioni sarebbero le benvenute.
Risposta accettata:
Il primo non funzionerà come se $null_terminated
è vuoto o non impostato, find
si lamenterà di quell'argomento aggiuntivo vuoto.
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) $null_terminated
Funzionerebbe ma solo se $null_terminated
non contiene caratteri jolly o caratteri di IFS.
Farlo:
if [[ -p '/dev/stdin' ]]; then
extra_args=(-print0)
else
extra_args=()
fi
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "${extra_args[@]}"
non avrebbe problemi.
Bourne/POSIXly, potresti fare:
imposta -- trova . ! -nome . -fesso ! ( "[email protetta]" )[ -p /dev/stdin ] &&set -- "[email protetta]" -exec printf '%s