Exportando uma função de .profile / .bashrc

2

O que estou fazendo errado ...? Tudo bem se eu fizer isso na linha de comando e, em seguida, chamá-lo, mas não quando eu carregá-lo de .profile. Linux Mint Qiana, Bash 4. *, se for importante.

function android() { command /opt/android-studio/bin/studio.sh "$@" & disown ; }

export -f android

Eu tentei encurtar o comando, estendendo-o, removendo o ponto-e-vírgula e usando uma nova linha ... Acho que ainda não encontrei o compromisso feliz. Nenhum erro quando executado na linha de comando e a função funciona como atualmente está listado acima.

Notas: Por "load" quero dizer para abrir uma nova sessão de terminal com o mesmo usuário cujo .profile estou editando ... e estou usando coisas como function , command e disown porque eu comecei com uma versão básica desta função, mas não estava funcionando, comecei a adicionar e remover coisas para tentar obter a combinação correta de coisas. Tudo correu bem na linha de comando.

    
por gloomy.penguin 05.07.2015 / 08:08

2 respostas

0

Tradicionalmente, as funções bash são colocadas em ~/.bashrc , pois são lidas por bashes interativos. ~/.profile é lido apenas por bashes de login. Novas janelas geralmente não executam bashes de login.

    
por 05.07.2015 / 19:33
3

No Ubuntu e no Linux Mint, a maioria das maneiras de iniciar uma sessão da GUI, incluindo a que eu acredito ser a padrão, faz com que /etc/profile e ~/.profile sejam lidos por /bin/sh , não por bash. /bin/sh é dash, um shell que é mais rápido e usa menos memória que o bash, mas não possui alguns de seus recursos, como a exportação de função. Seu ~/.xsession-errors deve conter linhas como .profile: 42: export: Illegal option -f .

Em vez de colocar suas funções no ambiente, defina-as no arquivo de inicialização para shells interativos: ~/.bashrc . Não há nenhum ponto em exportá-los, pois o arquivo é lido por cada shell interativo, e os shells não interativos serão principalmente sh, não bash, então eles não importarão a função - e mesmo assim disown não é útil em um shell -interactive shell.

    
por 06.07.2015 / 01:08