Was bedeutet + in der bash `-exec command {} +`?

467
scrapy

Für die Befehlsstruktur -exec command {} \;bekam ich Informationen 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 betreffenden Absatz -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 sagt nie etwas über +Was bedeutet + in der Bash -exec command {} +?
Es bedeutet, das Argument wie zu beenden ;?
+bedeutet plus wie 3+5=8oder concatenate, um zwei Strings zu einem wie s1+ zu verbinden s2.
Es ist eine seltsame Sache, eine Bedeutung terminate the argumentfür zuzuweisen +.

0
Dies wurde bei SO Prime hier, https://stackoverflow.com/questions/6085156/using-semicolon-vs-plus-with-exec-in-find und bei Unix SE hier, https: // unix ziemlich gut erklärt. stackexchange.com/questions/195939/what-ismeaning-of-in-finds-exec-command Uberfuzzy vor 5 Jahren 0

1 Antwort auf die Frage

1
Kamil Maciorowski

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 für diesen Zweck ausgewählt? Ich weiß es nicht. Ein Weg zum Schluss -execwar ein Muss und jemand entschied sich für ;und +. Jetzt sind die Zeichen Bestandteil des POSIX-Standards, wenn es um den findBefehl geht.

Wir können nur vermuten, dass ;das gewählt wurde, weil es auch einen Befehl in einer Shell beenden kann, so dass der Zweck ähnlich ist. Aus diesem Grund ;muss das, was gesehen werden findmuss, speziell in der Hülle behandelt werden, also \;( ';'oder ";"auch funktioniert). Es gibt kein solches Problem mit +.

Technisch hätte fast jede andere Zeichenfolge anstelle von +(die gleiche mit ;) gewählt werden können. 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 bedeutsam, wenn sie findverarbeitet werden, ihre Bedeutung kommt von der findErfindung.

Zusammenfassen:

  1. Es geht darum find, nicht um bash.
  2. Das Tool unterstützt zwei geringfügig unterschiedliche -execAktionen.
  3. Um sie voneinander zu unterscheiden, verwenden wir zwei verschiedene Argumente, die die -execAnweisung beenden . Es ist eine Designwahl.
  4. Diese zwei verschiedenen Argumente sind ;und +; Es ist eine Designwahl.
  5. Diese Wahl hätte anders getroffen werden können. Selbst wenn eine Geschichte dahinter steckt +(was ich nicht weiß), ist es eine Kleinigkeit, nicht etwas wirklich Sinnvolles. Ich kann nur spekulieren, {} +wenn "ein Argument oder mehr" wie 10+ manchmal "zehn oder mehr" bedeutet.

Ein breiterer Einblick

+bedeutet plus wie 3+5=8oder concatenate, um zwei Strings zu einem wie s1+ zu verbinden s2. Es ist eine seltsame Sache, dem Argument eine Bedeutung zuzuweisen +.

Wie wäre es mit

>bedeutet "größer als" ... Es ist eine seltsame Sache, eine Bedeutung für "Weiterleitung" zuzuweisen >.

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

  • Jemand entschied +in der Mathematik "Plus".
  • Jemand entschied >in der Mathematik "größer als".
  • Jemand entschied sich für >Weiterleitungen in einer Shell.
  • Jemand beschließt, +endet -execim findKontext.