Quando você corre
PATH=abc:$PATH echo $PATH
ou, no caso mais geral,
variable=value utility
o variable
é definido no ambiente do utility
(mas não no ambiente atual).
No entanto, quando sua linha de comando é analisada, o valor da variável PATH
é retirado do ambiente atual .
Você teria que definir a variável no ambiente onde a variável é expandida. Você pode fazer isso separando-o em duas etapas, como em
PATH=abc:$PATH; echo "$PATH"
que definiria PATH
no ambiente atual e então executaria echo "$PATH"
, ou definiria a variável para um shell filho, como em
PATH=abc:$PATH sh -c 'echo "$PATH"'
que definiria a variável PATH
dentro de sh -c
, mas não no shell atual.
No seu segundo exemplo,
PATH=/mybin:$PATH which python
O utilitário which
provavelmente dirá que python
é encontrado em /mybin
desde que você modifique PATH
em seu ambiente. Observe como PATH
nunca é expandido no ambiente atual aqui, mas internamente por which
.
Por acaso, which python
é melhor (mais portável) escrito command -v python
(consulte " Por que não usar" o que "? usar então? ").
Apenas uma reflexão rápida sobre o seu título, onde você diz " ENV
variable". A variável ENV
, mesmo que não seja isso que você quis dizer, é uma variável de ambiente que algumas implementações de sh
(e algumas outras shells) usam. Se seu valor for o nome de um arquivo, esse arquivo será originado antes de iniciar uma sessão de shell interativa. bash
tem uma variável BASH_ENV
que funciona da mesma maneira, mas para shells não interativos.