A sintaxe VARIABLE=VALUE COMMAND
para definir uma variável de ambiente para a duração de um comando só funciona quando o comando é um comando simples (mais precisamente, um comando externo ou um interno que age como um - veja Quando posso usar um IFS temporário para divisão de campo? / a> para mais detalhes). Você não pode usá-lo com um comando complexo, como um loop for.
Sua primeira tentativa falhou porque for
não foi a primeira palavra de um comando, então não foi analisado como uma palavra-chave, então o bash procurou por um comando chamado for
ao invés de analisar um loop for. Sua segunda tentativa falhou devido a um erro de sintaxe simples no loop: você precisa de um ponto-e-vírgula ou quebra de linha antes de do
, novamente porque senão do
não é reconhecido como uma palavra-chave. Da mesma forma, você também precisa de um ponto-e-vírgula antes de done
.
for x in {1..10}; do YII_ENV=prod yii kw/test; done
Para definir uma variável para a duração do loop, se você não se preocupa em sobrescrever um valor anterior, apenas configure a variável e desmarque-a depois.
export YII_ENV=prod
for x in {1..10}; do yii kw/test; done
unset YII_ENV
Como alternativa, execute o loop em um subshell. Esta é uma opção somente se o loop não deve modificar o ambiente do shell.
(
export YII_ENV=prod
for x in {1..10}; do yii kw/test; done
)
Como alternativa, execute o loop em uma função e torne a variável local para a função. Isso requer bash ou ksh ou zsh, não funciona em sh simples, mas a sintaxe {...}
tem esses requisitos de qualquer maneira.
call_yii () {
typeset YII_ENV=prod
export YII_ENV
for x in {1..10}; do yii kw/test; done
}