In una determinata shell, normalmente imposti una o più variabili e quindi eseguo un comando. Recentemente ho appreso il concetto di anteporre una definizione variabile a un comando:
FOO=bar somecommand someargs
Questo funziona ... in un certo senso. Non funziona quando si modifica una variabile LC_ * (che sembra influenzare il comando, ma non i suoi argomenti, ad esempio, gli intervalli di caratteri '[az]') o quando si esegue il piping dell'output su un altro comando in questo modo:
FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO
Posso anteporre somecommand2 anche con "FOO = bar", che funziona, ma che aggiunge duplicazioni indesiderate e non aiuta con argomenti interpretati a seconda della variabile (ad esempio, "[az]").
Quindi, qual è un buon modo per farlo su una sola riga?
Sto pensando a qualcosa sull'ordine di:
FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work
Ho un sacco di buone risposte! L'obiettivo è quello di mantenere questo aspetto unico, preferibilmente senza utilizzare "export". Il metodo che utilizzava una chiamata a Bash era nel complesso il migliore, sebbene la versione tra parentesi con "esportazione" fosse un po 'più compatta. Anche il metodo di usare il reindirizzamento piuttosto che una pipe è interessante.
(T=$(date) echo $T)
funzionerà