Möchten Sie diese Frage verbessern? Aktualisieren Sie die Frage, damit sie mit Fakten und Zitaten beantwortet werden kann, indem Sie diesen Beitrag bearbeiten.
Vor 7 Jahren geschlossen.
Verbessern Sie diese Frage
Angenommen, Sie haben das folgende Problem:
Abhängig davon, ob ein Skript innerhalb einer Pipe ausgeführt wird oder nicht, möchten Sie den -print0
anhängen Parameter zu find
.
Ich kann mir mindestens zwei Möglichkeiten vorstellen, dies zu tun:
[[ -p '/dev/stdin' ]] && local null_terminated='-print0'
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "$null_terminated"
Oder
if [[ -p '/dev/stdin' ]]; then
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) -print0
else
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" )
fi
Gibt es einen besseren Weg, dies zu tun? Die Frage ist für bash
, aber Lösungen für andere Shells oder portables/Standard-sh
Lösungen wären auch willkommen.
Akzeptierte Antwort:
Der erste funktioniert nicht so, als ob $null_terminated
leer oder nicht gesetzt ist, find
wird sich über dieses leere zusätzliche Argument beschweren.
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) $null_terminated
Funktioniert aber nur wenn $null_terminated
enthält keine Platzhalterzeichen oder Zeichen aus IFS.
Es tun:
if [[ -p '/dev/stdin' ]]; then
extra_args=(-print0)
else
extra_args=()
fi
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "${extra_args[@]}"
hätte das Problem nicht.
Bourne/POSIXly, Sie könnten Folgendes tun:
set -- find . ! -Name . -Pflaume ! ( "[email protected]" )[ -p /dev/stdin ] &&set -- "[email protected]" -exec printf '%s