Como executar o script na mesma sessão sem exec?

0

Eu tenho abaixo o script para me colocar no meu projeto: -

#! /bin/zsh

source ~/.zshrc
crld #alias for Project base
cd Kenneth_Love/survivalguide
workon kenneth_tutorial

Este script funciona, mas não me coloca no virtualenv (o alias está configurado corretamente)

Virtualenv como o nome sugere criar virtualenv que é usado para manter o ambiente gerenciável separadamente e por isso não interfere uns com os outros por exemplo em algum lugar que você quer x versão de um pacote e para outro projeto que você quer Y, então faz tão fácil. A execução acima dos comandos de script é uma tarefa repetitiva, mas esse script é executado em uma sessão diferente e, em seguida, sai. Eu quero que ele seja executado no mesmo shell em que estou chamando este script.

    
por user1517650 27.03.2016 / 09:57

1 resposta

1

Alguns comandos do shell (como cd ) afetam o shell atual e seus processos filhos / descendentes, mas não podem afetar o shell pai. Quando você executa um script como um comando comum (por exemplo, scriptname.sh ou ./scriptname.sh ) ele é executado em um processo de shell separado. Quando esse processo de shell termina, os efeitos desses comandos desaparecem. É por isso que os scripts como o seu geralmente terminam com exec sh , exec bash , exec zsh , ou o que for - isso faz com que o processo que está no novo ambiente persista, como um shell interativo.

Se você não quiser fazer dessa maneira, a única outra abordagem é executar o script em seu shell principal e interativo. No bash, você pode fazer isso com

source scriptname.sh

ou

. scriptname.sh

(talvez seja necessário usar ./scriptname.sh se o script estiver no diretório atual.) Tenho certeza que zsh tem a mesma funcionalidade. A sintaxe pode ser diferente; verifique a documentação do seu shell.

Se você tiver dificuldade em lembrar de fazer isso (ou se isso for complicado), considerando definir um alias para ele.

    
por 27.03.2016 / 22:15