Was bedeutet + in dem Bash-Befehl -exec {} +?

0

Für die Befehlsstruktur habe -exec command {} \;ich Informationen in man find.

  1. {} bedeutet selected files.
  2. ; bedeutet, das Argument zu beenden.
  3. \; entkam, um sie vor der Expansion durch die Schale zu schützen.

In dem Absatz zu -exec command {} +.

 -exec command {} +
              This  variant  of the -exec action runs the specified command on
              the selected files, but the command line is built  by  appending
              each  selected file name at the end; the total number of invoca
              tions of the command will  be  much  less  than  the  number  of
              matched  files.   The command line is built in much the same way
              that xargs builds its command lines.  Only one instance of  `{}'
              is  allowed  within the command, and (when find is being invoked
              from a shell) it should be quoted (for example, '{}') to protect
              it  from  interpretation  by shells.  The command is executed in
              the starting directory.  If any invocation  returns  a  non-zero
              value  as exit status, then find returns a non-zero exit status.
              If find encounters an error, this can sometimes cause an immedi‐
              ate  exit, so some pending commands may not be run at all.  This
              variant of -exec always returns true.

Es wird nie etwas darüber gesagt +. Was bedeutet + in der Bash -exec command {} +?
Es bedeutet, das Argument wie zu beenden ;?
+bedeutet plus wie 3+5=8oder concatenate, um zwei Zeichenfolgen zu einer wie s1+ zu verbinden s2.
Es ist eine seltsame Sache eine Bedeutung zuweisen terminate the argumentzu +.

Schrott
quelle
Dies wurde bei SO Prime hier ziemlich gut erklärt, stackoverflow.com/questions/6085156/… und bei Unix SE hier, unix.stackexchange.com/questions/195939/…
Uberfuzzy

Antworten:

1

Es hat nichts mit Bash zu tun, es ist Teil der findSyntax. Der Befehl muss wissen, wo die -execAktion endet. Es endet um ;oder um +. Abhängig vom Abschlusszeichen wird eine geeignete -execAktionsvariante verwendet.

Warum wurden diese beiden Charaktere zu diesem Zweck ausgewählt? Ich weiß es nicht. Ein Weg, die -execAussage zu beenden , war ein Muss und jemand wählte ;und +. Jetzt sind die Zeichen Teile des POSIX-Standards, wenn es um den findBefehl geht.

Wir können nur vermuten, dass dies ;ausgewählt wurde, da es auch einen Befehl in einer Shell beenden kann, sodass der Zweck ähnlich ist. Aus diesem Grund ;muss das aber gesehen werden, indem findin der Schale speziell behandelt wird \;( ';'oder ";"auch funktioniert). Es gibt kein solches Problem mit +.

Technisch hätte fast jede andere Saite gewählt werden können +(dasselbe gilt für ;). Beachten Sie, dass -exec, {}, +und ;(nachdem er übergibt die Schale durch Flucht oder zu zitieren), mögliche Tests oder Aktionen wie -typeoder -print- sie alle sind Argumente find; Sie werden bedeutungsvoll, wenn sie findverarbeitet werden. Ihre Bedeutung ergibt sich aus der Art und Weise, wie sie finderfunden wurden.

Zusammenfassen:

  1. Es geht darum find, nicht darum bash.
  2. Das Tool unterstützt zwei leicht unterschiedliche -execAktionen.
  3. Um sie voneinander zu unterscheiden, verwenden wir zwei verschiedene Argumente, die die -execAnweisung beenden . Es ist eine Design-Wahl.
  4. Diese zwei unterschiedlichen Argumente sind ;und +; Es ist eine Design-Wahl.
  5. Diese Entscheidungen hätten anders getroffen werden können. Auch wenn dahinter eine Geschichte steckt +(die ich nicht kenne), ist das Trivia, nichts wirklich Bedeutungsvolles. Ich kann nur spekulieren, {} +ist für "ein Argument oder mehr" wie 10+ manchmal bedeutet "zehn oder mehr".

Weiterer Einblick

+bedeutet plus wie 3+5=8oder concatenate, um zwei Zeichenfolgen zu einer wie s1+ zu verbinden s2. Es ist seltsam, eine Bedeutung zuzuweisen, die das Argument für beendet +.

Wie wäre es mit

>bedeutet "größer als" ... Es ist seltsam, eine Bedeutung für "umleiten" zuzuweisen >.

" +bedeutet plus" ist nicht von Gott. Jemand entschied, andere folgten und das Symbol blieb hängen.

  • Jemand, der sich entschieden hat, +bedeutet "Plus" in der Mathematik.
  • Jemand, der sich entschieden hat, >bedeutet in der Mathematik "größer als".
  • Jemand hat entschieden, >Weiterleitungen in eine Shell umzuleiten.
  • Jemand hat entschieden +, dass er -execim findKontext endet .
Kamil Maciorowski
quelle