Sourcing de um rcfile dentro de um subshell de parênteses no Bash?

0

Em zsh, um subshell criado por meio de parênteses pode ter um rcfile originado para usar comandos que podem ser aliases, disponíveis apenas quando diretórios específicos são adicionados a PATH , etc .:

~ » /bin/zsh -c "workon"
zsh:1: command not found: workon
------------------------------------------------------------
~ » /bin/zsh -c "source ~/.zshrc; workon"
env1
env2
env3
... (expected output)

No entanto, o mesmo não acontece com o bash:

~ » /bin/bash -c "workon"
/bin/bash: workon: command not found
------------------------------------------------------------
~ » /bin/bash -c "source ~/.bashrc; workon"
/bin/bash: workon: command not found
------------------------------------------------------------
~ » bash
sean@helium:~$ workon
env1
env2
env3
... (expected output)

Existe alguma maneira de uma subshell bash poder criar um rcfile?

Para obter uma resposta inicial sobre as respostas do "problema X-Y", isso é para um script chamado in :

#!/bin/zsh
(source ~/.zshrc; cd $1; ${@:2})

Eu tenho um diretório cheio de projetos (usando git) onde eu frequentemente esqueço se eu deixei algo não comprometido, então in me permite escrever rapidamente $ in ProjectDir/ git status , ao invés de $ (cd ProjectDir; git status) (o primeiro se sente mais fácil de digitar que o último).

De preferência, eu gostaria que esse script fosse utilizável com o bash (é por isso que eu pergunto, mesmo que ele funcione atualmente com o zsh).

    
por Sean Pianka 15.05.2018 / 23:30

1 resposta

1

No meu Kubuntu, a primeira coisa que o .bashrc faz é isso:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Eu acho que seu .bashrc é semelhante. É por isso que /bin/bash -c "source ~/.bashrc; …" "does not" source. Se você usou bash -i -c … , então .bashrc seria originado automaticamente e seu source iria analisá-lo desnecessariamente pela segunda vez.

    
por 16.05.2018 / 00:06

Tags