146 Stimmen

Wie kann der Wert einer Variablen an die Standardeingabe eines Befehls übergeben werden?

Ich schreibe ein Shell-Skript, das einigermaßen sicher sein soll, d.h. keine sicheren Daten über Parameter von Befehlen übergibt und möglichst keine temporären Dateien verwendet. Wie kann ich eine Variable an die Standardeingabe eines Befehls übergeben?

Oder, falls dies nicht möglich ist, wie kann ich temporäre Dateien korrekt für eine solche Aufgabe verwenden?

15voto

Robert Jacobs Punkte 3042

Ich mochte Martins Antwort aber es gibt einige Probleme, je nachdem, was in der Variable steht. Diese

your-command <<< """$your_variable"""

ist besser, wenn Ihre Variable Folgendes enthält " o ! .

9voto

cnst Punkte 23716

Gemäß Martins Antwort gibt es eine Bash-Funktion namens Hier Streicher (die ihrerseits eine Variante des weiter verbreiteten Hier Dokumente Funktion):

3.6.7 Hier Zeichenketten

Eine Variante der hier vorliegenden Dokumente ist das Format:

<<< word

Das Wort wird expandiert und an den Befehl auf seinem Standard Eingabe zugeführt.

Beachten Sie, dass Here Strings anscheinend nur in Bash verfügbar ist, so dass Sie für eine bessere Portabilität wahrscheinlich besser mit der ursprünglichen Here Documents-Funktion arbeiten sollten, wie in PoltoS's Antwort :

( cat <<EOF
$variable
EOF
) | cmd

Oder eine einfachere Variante des obigen Beispiels:

(cmd <<EOF
$variable
EOF
)

Sie können auslassen ( y ) , es sei denn, Sie möchten, dass diese weiter in andere Befehle umgeleitet werden.

3voto

unbeli Punkte 28027

Versuchen Sie dies:

echo "$variable" | command

0voto

tripleee Punkte 155951

Wenn Sie von einem Duplikat hierher gekommen sind, sind Sie wahrscheinlich ein Anfänger, der versucht hat, etwas zu tun wie

"$variable" >file

o

"$variable" | wc -l

wo Sie offensichtlich etwas meinten wie

echo "$variable" >file
echo "$variable" | wc -l

(Echte Anfänger vergessen auch die Anführungszeichen; normalerweise Anführungszeichen verwenden es sei denn, Sie haben einen besonderen Grund, sie wegzulassen, zumindest bis Sie das Zitieren verstehen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X