"Contexto" bash personalizado ao executar a partir de FISH

1

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!

Henrik Hillestad Løvold
fonte
duplicado: unix.stackexchange.com/q/183801/4667
glenn jackman
1
Eu recomendo que você abraça totalmente a sua opção de shell e mude seu shell de login para fish usando 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.
Spiff

Respostas:

2

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:

~/.bash_profile
    The personal initialization file, executed for login shells
~/.bashrc
    The individual per-interactive-shell startup file

Se você não invocar um shell de login bash -lou um shell interativo, bashmas usar um script como argumento, nenhum arquivo será carregado.

Por exemplo, se o arquivo test.sh contiver

function bashtest {
    echo "test"
}
bashtest

Se eu o executar usando o bash, ele será executado corretamente usando o bash como um interpretador.

Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
$user@host ~> bash test.sh
$test
$user@host ~> 

Se você quiser digitar um comando bash diretamente, você pode canalizar seu comando para bash da seguinte forma:

$user@host ~> echo "function bashtest { echo test; }; bashtest" | bash
$test
$user@host ~> 
Lattis
fonte