573 Stimmen

Das Setzen einer Umgebungsvariablen vor einem Befehl in der Bash funktioniert nicht für den zweiten Befehl in einer Pipe

In einer bestimmten Shell würde ich normalerweise eine oder mehrere Variablen setzen und dann einen Befehl ausführen. Kürzlich lernte ich das Konzept kennen, eine Variablendefinition einem Befehl voranzustellen:

FOO=bar somecommand someargs

Das funktioniert... irgendwie. Es funktioniert nicht, wenn Sie eine LC_* Variable (die den Befehl zu beeinflussen scheint, aber no seine Argumente, zum Beispiel, [a-z] char-Bereiche) oder bei der Weiterleitung der Ausgabe an einen anderen Befehl so:

FOO=bar somecommand someargs | somecommand2  # somecommand2 is unaware of FOO

Ich kann somecommand2 vorangestellt FOO=bar was zwar funktioniert, aber unerwünschte Duplizierung hinzufügt, und es hilft nicht bei Argumenten, die abhängig von der Variable interpretiert werden (zum Beispiel, [a-z] ).

Wie kann man dies in einer einzigen Zeile tun?

Ich denke an etwas in der Größenordnung von:

FOO=bar (somecommand someargs | somecommand2)  # Doesn't actually work

Ich habe viele gute Antworten bekommen! Das Ziel ist es, dies in einem Einzeiler zu halten, vorzugsweise ohne die Verwendung von export . Die Methode mit einem Aufruf der Bash war insgesamt am besten, obwohl die Klammerversion mit export war er etwas kompakter. Die Methode der Umleitung anstelle eines Rohrs ist ebenfalls interessant.

-6voto

Spencer Rathbun Punkte 13966

Verwenden Sie ein Shell-Skript:

#!/bin/bash
# myscript
FOO=bar
somecommand someargs | somecommand2

> ./myscript

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