
Eu me peguei; Não consegui fazer login no root depois de criar um script e chamá-lo de ~/.bashrc
.
~/.bashrc:
#... do stuff then run my script
source ~/myscript.sh
~/meuscript.sh:
#!/bin/bash
if [myConditional]; then
exit
fi
# otherwise do stuff
O que eu esperava era que, quando eu fizesse login como root, myscript.sh fosse executado e, se myConditional fosse verdadeiro, myscript.sh parasse de executar quaisquer outros comandos, mas retornaria para .bashrc e o usuário ainda estaria logado como root, como de costume. Mas, em vez disso, exit
impediu-me de conseguir fazer login! Ele apenas me retornou a um prompt de login.
Existe outro comando que eu deveria usar além exit
? Obviamente eu poderia simplesmente estender a if
declaração tendo uma else
declaração e removendo exit
, mas para fins educacionais gostaria de saber se existe uma abordagem mais apropriada. (Também em parte porque quero evitar if
declarações profundamente aninhadas; pode ser um script bastante grande)
Responder1
source filename.sh
(ou . filename.sh
) executa o conteúdo defilename.sh
no intérprete atual(essencialmente, como se você tivesse copiado o conteúdo naquele ponto). Conseqüentemente, exit
sairá desse intérprete.
Se você deseja apenas executar o script como um programa separado, não use source
: apenas ~/myscript.sh
o executará se você torná-lo executável primeiro com chmod +x ~/myscript.sh
, ou você pode usar bash ~/myscript.sh
se preferir. Isso inicia um novo shell para executar seu script, como se fosse qualquer outro programa no sistema.
Por outro lado, se você realmente pretende usar source
o seu script (porque ele definirá variáveis de ambiente, por exemplo), poderá parar de executar o restante do arquivo sem afetar .bashrc
o shell que o executou.usandoreturn
:
return
também pode ser usado para encerrar a execução de um script que está sendo executado com o.
(source
) embutido, retornandon
ou o status de saída do último comando executado no script como o status de saída do script
Nesse caso, seu myscript.sh
arquivo teria:
if [[ condition ]]
then
return 0
fi
com o efeito que você queria.