./kommando <<< mehrere Argumente

-5

Wenn ich ein Programm namens "prog" habe, das nur ein Argument benötigt, kann ich schreiben:

./prog <<< 1

Aber wenn ich ein Programm habe, das 2 Argumente benötigt, warum funktioniert das nicht:

./prog <<< 2 3

Ich konnte keine Antwort finden Googeln. Wie kann das gehen?

Hinweis: Ich brauche dies, um eine zu schreiben .sh

Yemino
quelle
<<<liefert keine Argumente , sondern liefert Input . Eine Eingabezeile, die aus 2Leerzeichen 3und Zeilenumbrüchen besteht, ist eine Eingabezeile und nicht zwei Argumente.
G-Man

Antworten:

3

Der <<<Bediener ist in der bash(1)Manpage dokumentiert . Es ist für "here strings" (im Konzept ähnlich wie "here documents", die es schon seit Ewigkeiten in der Shell-Syntax gibt).

Die Syntax:

command <<< word

… Wird erweitert wordund commandals Standardeingabe übergeben.

Es ist äquivalent zu:

echo word | command

Wenn Sie wirklich wollten, dass sowohl 1 als auch 2 als Standardeingabe übergeben werden (keine Argumente / Parameter), können Sie dies tun mit:

./command <<< "1 2"

oder

./command <<< 1\ 2

Grundsätzlich müssen Sie die Leerstelle zwischen 1 und 2 umgehen, um zu verhindern, dass die Eingabe in zwei Wörter aufgeteilt wird.

Spiff
quelle
-1

Ich konnte keinen Verweis auf den Operator "<<<" für bash finden, aber es schien, als würde der Text unmittelbar nach dem Operator verwendet und als erste Variable analysiert.

Wenn Sie ein BASH-Skript schreiben, ist dies nicht erforderlich. Sie können einfach $ X für jede Variable verwenden und dann die Variablen zum Skript hinzufügen. Zum Beispiel:

/bin/bash
echo "Usage:  $0 variable1 variable2"
echo "Variable 1 value is $1"
echo "Variable 2 value is $2"

Wenn Sie die obige Datei als "test.sh" speichern, müssen Sie sie ausführbar machen und als ausführen ./test.sh hello world

Verwendungszweck: ./test.sh Variable1 Variable2 Wert von Variable 1 ist Hallo Wert von Variable 2 ist Hallo Welt

$ 0 = der Name des Skripts. Wenn Sie 2 Parameter mit Leerzeichen übergeben möchten, zum Beispiel "Hello World" und "This is a test", würden Sie dies als ./test.sh "Hello World" bezeichnen, "his is a test".

Davidgo
quelle
Danke @davidgo, tatsächlich lag mein Problem nicht in der * .sh-Eingabe, sondern in der Programmeingabe "prog". Ich habe eine Antwort mit meiner Lösung geschrieben.
Yemino
"Ja wirklich?" Sie haben nicht gelesen Was sind die Steuerungs- und Umleitungsoperatoren der Shell? noch?
G-Man
-1

So habe ich mein Problem gelöst:

#/bin/bash
(echo 1 2)  |  ./prog
Yemino
quelle