O que é bash\_profile e para que serve?


Melhor resposta

Obrigado por A2A.

Acredito que Anmol Vishwakarma deu uma excelente descrição no importa.

Apenas para ter certeza de colocar as coisas em perspectiva:

  • / etc / profile, ~ / .bash\_rc , e ~ / .bash\_profile, são todos arquivos e são chamados de c scripts de configuração. Eles podem conter declarações de variáveis, variáveis ​​de exportação, comandos a serem executados no login como e-mail ou checagem de notícias, configuração de umask, entre outros. Coisas típicas que os usuários fazem são: adicionar algum diretório a $ PATH, exportar alguma variável, alterar $ PS1, definir cores de exibição, adicionar uma mensagem de texto de saudação, etc.
  • Todos esses arquivos, exceto / etc / profile, são por padrão ocultos, conforme indicado pelo ponto inicial (portanto, não é bash\_profile , mas na verdade, .bash\_profile ).
  • Quando você faz o login (local ou remotamente), isso é chamado de shell de login e é tratado um pouco um pouco diferente da invocação de shell normal. Nesse caso, o arquivo / etc / profile , se presente, é executado, após o qual um ~ /.bash\_profile ou um arquivo ~ / .bashrc é executado, nessa ordem.
  • Para um shell interativo, isto é aquele com o qual você pode interagir, porque os stdin e stderr do shell são TTYs, o ~ / .bash\_profile arquivo não é executado, mas o ~ / .bashrc é.
  • Para um shell não interativo, ou seja, aquele com um ou ambos stdin / stderr não é um TTY, nenhum script de configuração é executado .
  • Em um shell de login, no logout, um arquivo ~ / .bash\_logout , se presente, é executado.
  • De acordo com POSIX, stderr (e não stdout ) é o fluxo que determina se um shell é interativo. Se stderr for redirecionado, não é um shell interativo, a menos que -i seja especificado em a invocação do shell. stdout não tem o mesmo efeito.

Resposta

Essa é apenas minha opinião, mas if exit no contexto de uma função shell (que sai do processo shell atual) era o mesmo que um return (que retorna do função atual), então você não poderia escrever código em uma função shell que feche o script atual quando uma condição fatal for detectada pelo código no corpo da função. Pense em chamadas para o tempo de execução assert() (ou equivalentes) em linguagens de programação mais estruturadas.

Tudo o que você poderia fazer em vez disso seria retornar um código de erro ao chamador.

É verdade, sair abruptamente com erros fatais definitivamente não é o melhor estilo de programação (libsvn do Subversion já teve uma péssima reputação por causa disso: erros fatais detectados no o código da biblioteca resultou no programa usando-o encerrando abruptamente, sem dar chance ao código de chamada de notificar o usuário ou tentar se recuperar do erro.

No entanto, ser capaz de sair abruptamente ao detectar erros fatais é bastante prático no desenvolvimento de soluções que funcionem nas condições esperadas – e a programação shell (e, portanto, a programação GNU Bash também) sempre tratou de fornecer soluções práticas curtas para os casos comuns, e não soluções complexas tratando cuidadosamente todas as espécies possíveis l caso (há muitas outras ferramentas / linguagens para isso, seja C, Tcl, Perl, Python ou mesmo PowerShell).

Observe também que o provável motivo pelo qual alguém está usando scripts de shell Bourne em o primeiro lugar, em vez de usar as ferramentas / linguagens mencionadas acima, é porque usar as primeiras é muito mais fácil reunir algo que realmente faça um trabalho útil do que usar as últimas – a suposição era que o script de shell permitia aos usuários usar quase a mesma sintaxe e ferramentas que eles usavam interativamente todos os dias, algo com que já estavam familiarizados.

Você perguntou: O comando return integrado no bash é para as funções do shell, mas por que o comando exit não é suficiente para as funções do shell?

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *