Pergunta

Eu sou novo para o shell bash scripting, e ter deparado com um desafio.Eu sei que eu posso recarregar meu ".perfil" do arquivo que está fazendo:

. .profile

mas eu estou tentando executar o mesmo em um bash script que eu estou escrevendo, e é só trabalho.Qualquer idéias?Qualquer coisa que eu possa fornecer a esclarecer?

Obrigado

Foi útil?

Solução

Tente isto para recarregar o seu shell atual:

source ~/.profile

Outras dicas

Tente isso:

cd 
source .bash_profile

Um par de questões que surgem ao tentar recarregar/source ~/.arquivo de perfil.[Refere-se ao Ubuntu linux - em alguns casos os detalhes dos comandos será diferente]

  1. Você está executando diretamente no terminal ou em um script?
  2. Como você executar isso em um script?

Um anúncio.1)

Executando isso diretamente no terminal significa que não haverá sub-shell criado.Assim, você pode usar qualquer um dos dois comandos:

source ~/.bash_profile

ou

. ~/.bash_profile

Em ambos os casos isto irá actualizar o ambiente com o conteúdo .arquivo de perfil.

Ad 2) Você pode iniciar qualquer um bash script chamando

sh myscript.sh 

ou

. myscript.sh

No primeiro caso, isto irá criar um sub-shell que não irá afetar as variáveis de ambiente do seu sistema, e eles serão visíveis apenas para o sub-shell processo.Depois de terminar o sub-shell de comando de nenhuma das exportações etc.não será aplicada.ESTE É UM ERRO COMUM E FAZ COM QUE UMA GRANDE QUANTIDADE DE DESENVOLVEDORES PARA PERDER UM MONTE DE TEMPO.

Para que as alterações aplicadas no seu script para ter efeito para o ambiente global, o script deve ser executado com a

.myscript.sh

de comando.

A fim de certificar-se de que o script não é executado em um subshel você pode usar esta função.(Novamente o exemplo é para o Ubuntu shell)

#/bin/bash

preventSubshell(){
  if [[ $_ != $0 ]]
  then
    echo "Script is being sourced"
  else
    echo "Script is a subshell - please run the script by invoking . script.sh command";
    exit 1;
  fi
}

Espero que este autoriza a alguns dos mal-entendidos comuns!:D Boa Sorte!

O bash script é executado separadamente em um sub-shell.Para fazer esse trabalho, você vai precisar de origem este script bem.

Tente:

#!/bin/bash
# .... some previous code ...
# help set exec | less
set -- 1 2 3 4 5  # fake command line arguments
exec bash --login -c '
echo $0
echo $@
echo my script continues here
' arg0 "$@"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top