Se um script deve ser executado no shell atual, isso pode ser alcançado adicionando um ponto antes do comando:
. ./somescript.sh
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 umbash
subshell). Portanto, as modificaçõessomescript.sh
feitas 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
.
ousource
.fonte
alias
comando, como sugeriu scott.Se você executa
./somescript.sh
como 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.fonte
Acho que o script que você está tentando executar não é executável.
chmod a+x somescript.sh
adicionará 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.sh
mostrará 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.fonte
export PATH=$PATH:/usr/local/bin
adicionar / 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.sh
está sendo executado corretamente - você está usando o comando dot para originar um arquivo. O tcsh usa "fonte" para a mesma coisa.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
./
fonte
.
não o./
que faz parte do nome do arquivo. A execução de ./somescript não o executa no shell atual como o. ./somescript
faz.