Vous voulez améliorer cette question ? Mettez à jour la question afin qu'elle puisse être répondue avec des faits et des citations en éditant ce message.
Fermé il y a 7 ans.
Améliorer cette question
Supposons que vous ayez le problème suivant :
Selon qu'un script est exécuté dans un tube ou non, vous souhaitez ajouter le -print0
paramètre à find
.
Je peux penser à au moins deux façons de procéder :
[[ -p '/dev/stdin' ]] && local null_terminated='-print0'
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "$null_terminated"
Ou
if [[ -p '/dev/stdin' ]]; then
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) -print0
else
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" )
fi
Y a-t-il une meilleure façon de faire cela? La question est pour bash
, mais des solutions pour d'autres shells ou portables/standard sh
des solutions seraient également les bienvenues.
Réponse acceptée :
Le premier ne fonctionnera pas comme si $null_terminated
est vide ou non défini, find
se plaindra de cet argument supplémentaire vide.
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) $null_terminated
Fonctionnerait mais seulement si $null_terminated
ne contient aucun caractère générique ou caractère IFS.
Faire :
if [[ -p '/dev/stdin' ]]; then
extra_args=(-print0)
else
extra_args=()
fi
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "${extra_args[@]}"
n'aurait pas le problème.
Bourne/POSIXly, vous pourriez faire :
set -- trouver . ! -Nom . -prune ! ( "[email protected]" )[ -p /dev/stdin ] &&set -- "[email protected]" -exec printf '%s