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.