Execute o script no shell atual sem. antes do comando

25

Se um script deve ser executado no shell atual, ele pode ser obtido 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?

    
por alu 27.11.2013 / 23:52

5 respostas

22

Pode não ser exatamente o que você quer, mas você pode fazer:

alias somescript.sh='. ./somescript.sh'
    
por 28.11.2013 / 01:50
8

Is there a way to do this without typing the dot every time? For example a command to change to the parent shell from the script itself?

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 com ./somescript.sh , o shell executará e executará este comando. Ele passa o comando para o kernel e, em seguida, 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 bash subshell). Portanto, as modificações que o somescript.sh faz em seu ambiente são isoladas no subshell sem afetar o shell pai.

Se você quiser que o shell leia o próprio script sem iniciar outro processo, você terá que explicitamente informá-lo usando a palavra-chave . ou source .

    
por 28.11.2013 / 01:37
1

Se você executar ./somescript.sh como um programa externo, ele não poderá fazer nada dentro do processo do shell em execução, como acessar variáveis não exportadas, configurar variáveis, alterar o diretório atual etc. Não há como evitar isso .

(Bem, ok, você pode ser capaz de executar um depurador 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 executar . ./somescript.sh . Você pode esconder isso por trás de um alias ou função, se quiser, mas novamente o alias ou a definição da função deve ser feita no shell pai.

    
por 28.11.2013 / 01:54
0

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-lhe-á os trigêmeos rwx (leitura / gravação / execução) do arquivo. Ele precisará de um x no primeiro conjunto, supondo que você tenha o arquivo.

    
por 28.11.2013 / 00:10
0
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 onde seu shell irá procurar binários para executar quando você emitir um comando.

Isso permitirá que você execute qualquer executável no diretório atual sem ./

    
por 05.03.2014 / 07:37

Tags