Wie viele Möglichkeiten gibt es insgesamt, einen Befehl mit Eingaben zu versorgen?

9

Das erste, was mir an Linux aufgefallen ist, waren die verschiedenen Möglichkeiten, Daten in einen Befehl einzugeben. Ich kenne einige, aber ich weiß nicht, wie viele es insgesamt gibt.

die Wege, die ich bisher kenne:

Rohrleitungen:

echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort

von der Tastatur mit Dateiende-Signal:

sort
>gurken
>zucker
>braunkohle

aus Datei:

sort foo

HERE-Zeichenfolge (eigentlich HERE-Dokument genannt):

sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE

Ist das alles oder gibt es mehr Möglichkeiten, warum gibt es überhaupt verschiedene Möglichkeiten, sind einige Möglichkeiten überflüssig?

Hai
quelle

Antworten:

9

Zumindest folgendes:

  1. Befehlsoptionen: foo --bar

  2. Standardeingabe: foo | baroderbar < foo

  3. Datei (en): foo *.*(oder durch Öffnen von Datei (en) über Code in foo) †

  4. Umweltexport: export foo=bar; baz

  5. Umwelt (ohne Export): foo=bar bazoderenv foo=bar baz

  6. HIER doc: foo << EOF bar EOF

  7. HIER String: foo <<< bar

  8. Signale kill -SIGUSR1 $procid

  9. Eine ganze Reihe von prozessübergreifenden Kommunikationen , wie z. B. Sockets, TCP und Dateien mit Speicherzuordnung

† Ja, mir ist klar, dass stdin eine Datei ist (oder dateiähnlich). Und das Übergeben solcher Dateien ist wirklich dasselbe wie das Übergeben von Optionen

Neil McGuigan
quelle
1
Sie können foo < barals zusätzliche Variante hinzufügen (Datei über stdin)
Hagen von Eitzen
14

Zunächst sort << HEREund so weiter ist keine Here-Zeichenfolge. Das ist ein Hier-Dokument. Die Here-Zeichenfolge verwendet den <<<Operator. Das ist in Bash (und einigen anderen Muscheln).

Im Allgemeinen gibt es zwei Möglichkeiten. Eine erfolgt über Standardeingaben (und Umleitungen) und die andere über Parameter.

  1. Standardeingabe und ihre Umleitungen

    Dies ist der Stream, der standardmäßig mit dem Terminal verbunden ist, in dem ein Befehl ausgeführt wird und mit fd (Dateideskriptor) 1 verknüpft ist. Er wird mit dem Terminal verbunden, was auch immer eingegeben wurde. Obwohl es (die Eingabe) wie bei Verwendung der Pipe |oder unter Verwendung der Here-Dokumente oder Here-Strings umgeleitet werden kann . Dann kommt die Eingabe nicht vom Terminal, sondern wird an die Standardausgabe des Befehls vor der Pipe angehängt. Unterschiedliche Shells haben unterschiedliche Umleitungen. Daher sollten Sie für diese Kategorie die Shell-Dokumentation überprüfen. Suchen Sie nach Eingabeumleitungen.

  2. Parameter

    Dies ist in Ihrem Beispiel sort foo. Wenn Sie ein Programm oder eine Funktion aufrufen, übergeben Sie ihm einen oder mehrere Parameter. Eine lokale Datei ist nur eine Möglichkeit. Der Parameter kann eine URL oder was auch immer enthalten. Die Möglichkeiten hier sind endlos.

Zusammenfassend gibt es zwei allgemeine Möglichkeiten:

  • Der erste abstrahiert von der inneren Logik der Anwendung und manipuliert die Standardeingabe auf Betriebssystem- / Shell-Ebene.

  • Während die zweite die Innereien der Anwendung betrifft, bieten sie unbegrenzte Möglichkeiten, basierend auf den Aufrufparametern als Schnittstelle.

Für beide Wege gibt es keine Grenzen. Die tatsächlichen Grenzen liegen jedoch beim Betriebssystem / der Shell und der Anwendung selbst.

Kusalananda
quelle