Respostas:
Existe uma maneira de fazer isso sem digitar o ponto toda vez? Por exemplo, um comando para mudar para o shell pai a partir do próprio script?
Eu não acho que exista (além de digitar source somescript.sh, mas provavelmente não é isso que você está procurando ^^).
Se você executar o script normalmente ./somescript.sh, o shell bifurca e executa esse comando. Ele passa o comando para o kernel e então o kernel decide como esse comando deve ser executado analisando a #!linha dentro do script. O kernel então inicia o intérprete especificado (neste caso provavelmente um bashsubshell). Portanto, as modificações somescript.shfeitas em seu ambiente são isoladas no subshell sem afetar o shell pai.
Se você deseja que o shell leia o próprio script sem iniciar outro processo, é necessário explicitamente dizer usando a palavra-chave .ou source.
aliascomando, como sugeriu scott.
Se você executa ./somescript.shcomo um programa externo, ele não pode fazer nada dentro do processo do shell em execução, como acessar variáveis não exportadas, definir variáveis, alterar o diretório atual etc. Não há como contornar isso.
(Bem, ok, você pode executar um depurador a partir do subprocesso e ajustar a memória do processo pai. Mas se você tentar, o resultado mais provável é travar o shell pai.)
Você precisa correr . ./somescript.sh. Você pode ocultar isso atrás de um alias ou função, se quiser, mas, novamente, o alias ou a definição de função devem ser feitos no shell pai.
Acho que o script que você está tentando executar não é executável. chmod a+x somescript.shadicionará o bit de execução para usuário, grupo e outros (ugo) a esse arquivo. A primeira linha do arquivo também precisará do #! linha no topo, como #!/bin/bash.
ls -l somescript.shmostrará os trigêmeos rwx (leitura / gravação / execução) para o arquivo. Ele precisará de um x pelo menos no primeiro conjunto, supondo que você seja o proprietário do arquivo.
export PATH=$PATH:/usr/local/binadicionar / usr / local / bin ao seu $ PATH, será necessário originar o arquivo para alterar as variáveis de ambiente em execução. Esta pergunta é realmente "Como altero programaticamente minhas variáveis de ambiente no meu shell em execução a partir de um script bash?" O script . ./somescript.shestá sendo executado corretamente - você está usando o comando dot para originar um arquivo. O tcsh usa "fonte" para a mesma coisa.
export PATH=$PATH:.
Executar esse comando no shell ou adicioná-lo ao seu arquivo de configuração do shell anexará o diretório atual à variável PATH. A variável PATH é uma lista de diretórios em que seu shell procurará binários para executar quando você emitir um comando.
Isso permitirá que você execute qualquer executável no diretório atual sem ./
.não o ./que faz parte do nome do arquivo. A execução de ./somescript não o executa no shell atual como o . ./somescriptfaz.