Issue
In a given shell, normally I'd set a variable or variables and then run a command. Recently I learned about the concept of prepending a variable definition to a command:
FOO=bar somecommand someargs
This works... kind of. It doesn't work when you're changing a LC_*
variable (which seems to affect the command, but not its arguments, for example, [a-z]
char ranges) or when piping output to another command thusly:
FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO
I can prepend somecommand2 with FOO=bar
as well, which works, but which adds unwanted duplication, and it doesn't help with arguments that are interpreted depending on the variable (for example, [a-z]
).
So, what's a good way to do this on a single line?
I'm thinking something on the order of:
FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work
I got lots of good answers! The goal is to keep this a one-liner, preferably without using export
. The method using a call to Bash was best overall, though the parenthetical version with export
in it was a little more compact. The method of using redirection rather than a pipe is interesting as well.
Solution
FOO=bar bash -c 'somecommand someargs | somecommand2'
Answered By - Dennis Williamson Answer Checked By - David Marino (WPSolving Volunteer)