No Linux (Ubuntu 11.04) no bash, é possível definir temporariamente uma variável de ambiente que será diferente apenas da variável normal durante o script? Por exemplo, em um script de shell, tornando um aplicativo que salva no HOME portátil, configurando temporariamente o HOME como uma pasta no diretório de trabalho atual e iniciando o aplicativo.
linux
bash
environment-variables
suchipi
fonte
fonte
Respostas:
fonte
vblank_mode=0 glxgears
. Funciona, mas também dizvblank_mode=0: command not found
após a execução, enquanto a adiçãoenv
não causa isso. [testando ...] Aparentemente, o zsh não gosta (ainda o usa corretamente), mas o bash é bom com ele. Acho que vou seguir com oenv
método a partir de agora.VAR1="hello" echo $VAR1
que tal não retorna nada?VAR1="hello" bash -c 'echo $VAR1'
fonte
VAR=value myScript args ...
PATH=$PATH:XYZ echo $PATH | grep XYZ
que não tem saída? 2. Qual é a diferença entre usar e não usarenv
?PATH=$PATH:XYZ sh -c 'echo $PATH' | grep XYZ
- as aspas simples são a chave aquienv
e não usá-lo?IFS=$'\n' for l in lines; do ... done
Apenas coloque
no ponto do script em que você deseja que a alteração ocorra. Como cada processo possui seu próprio conjunto de variáveis de ambiente, essa definição automaticamente deixará de ter algum significado quando o script terminar (e com ele a instância do bash que possui um ambiente alterado).
fonte
export
passará a variável para subshells, mas não controla o shell pai. Se você estiver escrevendo um script que comece com "#! / Bin / sh" ou algo semelhante, QUALQUER variável que você definir desaparecerá quando o script sair.source
o script que será executado pelo mesmo shell em que você digitou o comando.$HOME
ser herdado por qualquer comando executado a partir do script. E se ele não o fizer, e a configuração de$HOME
for apenas para o benefício do próprio script, provavelmente seria melhor modificar o script para que ele se refira a algo diferente$HOME
.