Pode não ser exatamente o que você quer, mas você pode fazer:
alias somescript.sh='. ./somescript.sh'
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?
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
.
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.
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.
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 ./
Tags shell