Se você quiser que seu script não espere a execução de um comando para terminar antes de prosseguir para o próximo comando, adicione &
ao final da linha de comando.
Além disso, você não precisa de um loop se quiser fazer algo diferente a cada volta do loop. Basta listar as coisas que você deseja fazer em seqüência.
Depois de um pouco de retrocesso nos comentários, eu entendo que você quer que o xterm execute um bash
shell que deve primeiro criar seu script openapps.sh
e então executar uma função definida no script. Então, algo assim deveria funcionar:
xterm -e bash -c "source /home/akshay/openapps.sh; opensublime; bash" &
xterm -e bash -c "source /home/akshay/openapps.sh; openspark; bash" &
xterm -e bash -c "source /home/akshay/openapps.sh; openpycharm; bash" &
xterm -e bash -c "source /home/akshay/openapps.sh; runproject 8000; bash" &
Não tenho certeza se a parte ... ; bash
é realmente necessária, mas guardei apenas por precaução.
Seus comandos originais tiveram alguns problemas:
xterm -e "source /home/akshay/openapps.sh; bash"
opensublime
Isso diz ao xterm para executar a linha de comando source /home/akshay/openapps.sh; bash
. Mas xterm
não é um shell: ele só pode executar coisas que são arquivos executáveis reais no disco. source
é um comando interno em shells no estilo Bourne e, portanto, não existe como um arquivo executável.
O script openapps.sh
é originado pela instância de bash
dentro do xterm, mas os comandos opensublime
/ openspark
etc. estão tentando chamar as funções de openapps.sh
em uma instância de shell diferente, que não necessariamente originou openapps.sh
e, portanto, esses comandos podem falhar.
Então, você precisará de xterm
para executar um shell dentro da nova janela xterm , com uma linha de comando especificada. xterm -e bash -c "<commands>"
faz isso.
Se você quiser usar seu opensublime
e outras funções, será necessário executá-las no mesmo shell que originou seu openapps.sh
, caso contrário, elas provavelmente produzirão apenas command not found
de mensagens de erro. E é por isso que esses comandos precisavam ser movidos dentro das aspas duplas.
ulimit
e export
ed podem ser propagadas de um processo pai por um filho não-shell ( xterm
neste caso) para um processo neto ( bash
em execução no xterm
) , mas as funções do shell não serão passadas dessa maneira; eles precisarão ser recarregados.