Setting an environment variable before a command in Bash is not working for the second command in a pipe

bash, environment-variables

Solution

FOO=bar bash -c 'somecommand someargs | somecommand2'

Problem

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.

Original source

Related problems