Primeiro de tudo, estou no OSX10. Meu shell padrão é BASH, que eu configurei (através de .profile e .bashrc) para executar automaticamente o shell FISH quando eu abro meu emulador de terminal. Isso me permite configurar variáveis etc. no BASH antes de carregar o FISH.
Às vezes, no entanto, quero executar scripts que são escritos para o BASH, do meu shell FISH. Isso é necessário porque o FISH não é sintaticamente compatível com o BASH. Ao digitar 'bash' no meu FISH, o BASH que eu abro automaticamente abre outro FISH em cima de si mesmo, por causa do meu .profile / .bashrc. Isso torna tudo suspeito (trocadilho intencional), porque eu tenho que sair do topo do FISH para entrar no BASH no topo do segundo FISH.
Minha pergunta é: Eu sei que o BASH pode ser carregado como um shell de login (executando .profile) e um shell não-login (executando .bashrc). Seria possível adicionar um terceiro 'contexto', que eu posso configurar para carregar quando o BASH é executado de dentro do FISH? Isso resolveria o problema do double-FISH porque eu não conseguiria carregar o .bashrc ou o .profile.
Espero que você entenda a minha pergunta - obrigado antecipadamente por respostas!
chsh -s /usr/local/bin/fish
(ou onde quer que você tenha peixe instalado. Além disso, você pode precisar adicionar fish à lista de shells conhecidos em / etc / shells). Aprenda a configurar variáveis em peixes e pare de usar o bash como uma muleta.Respostas:
Se você quiser executar scripts a partir do seu fish shell, não há necessidade de adicionar um terceiro contexto, tudo que você precisa fazer é executar
bash myscript.sh
.Da página do homem bash:
Se você não invocar um shell de login
bash -l
ou um shell interativo,bash
mas usar um script como argumento, nenhum arquivo será carregado.Por exemplo, se o arquivo test.sh contiver
Se eu o executar usando o bash, ele será executado corretamente usando o bash como um interpretador.
Se você quiser digitar um comando bash diretamente, você pode canalizar seu comando para bash da seguinte forma:
fonte