GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie setze ich einen optionalen Parameter?

Geschlossen . Diese Frage ist meinungsbasiert. Antworten werden derzeit nicht akzeptiert.

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
Linux
  1. So verwenden Sie FIND unter Linux

  2. So richten Sie einen Nginx-Reverse-Proxy ein

  3. Wie kann ich CMake dazu bringen, meine alternative Boost-Installation zu finden?

  4. Wie lege ich einen Standard-Nick für neue irssi-Verbindungen fest?

  5. Wie finde ich die Zeilennummer in Bash, wenn ein Fehler aufgetreten ist?

So finden Sie die IP-Adresse in Kali Linux

So finden Sie die IP-Adresse unter Linux

So legen Sie den Hostnamen unter Linux fest oder ändern ihn

So finden Sie den Hostnamen unter Linux

So installieren und konfigurieren Sie SeedDMS

So finden Sie Dateien in Debian