Obrigado por toda a entrada. Tentarei responder à minha pergunta agora e fornecer um guia completo sobre as diferentes possibilidades de executar scripts e binários. Por favor, edite e comente e poderemos encontrar algo completo e correto. Aqui está minha sugestão:
Primeiramente, dois pontos a declarar:
-
O Linux faz uma distinção entre um comando e um caminho . Um comando é apenas digitado como está no prompt, e irá executar um built-in ou fará com que o Linux procure por um binário ou um script correspondente no $ PATH.
-
Para o Linux interpretar algo como um caminho, ele precisa conter pelo menos uma barra (/). Por exemplo. em ./myScript
, ./
pode parecer bastante redundante - está lá apenas para fazer o Linux interpretá-lo como um caminho em vez de um comando.
Então, as opções para executar um binário ou um script:
Execução de um binário binary
:
$ binary # when 'binary' is on the PATH, or is a built-in
$ ./binary # when 'binary' is not on the path but in the current directory
$ /home/me/binary # when 'binary' is not on the PATH, and not in the current dir
Execução de um script script
:
O arquivo terá que ter permissões de execução, salvo indicação em contrário.
$ script # execute a script that is on PATH. Will be executed in a new shell.
# The interpreter to use is determined by the she-bang in the file.
$ ./script # execute a script that is in the current dir. Otherwise as above.
$ /a/dir/script # when the script is not on the PATH and not in current dir.
# Otherwise as above.
$ . script # execute a script in the current dir. Will be executed in the
# current shell environment.
$ source script # equivalent to the above *1
$ sh script # executes 'script' in a new shell *2 (the same goes for 'bash ...',
# 'zsh ...' etc.). Execute permission not neccessary.
Sobre a she-bangs :
Os scripts com um she-bang (por exemplo, #!/bin/sh
) na primeira linha informam qual interpretador usar.
- Este interpretador será usado quando executado por
./script
ou usando um comando: script
( script
deve estar no PATH)
- O uso de
sh script
ignorará o uso e o uso, neste caso, sh
como o interpretador
- O uso de
. script
ou source
ignorará o she-bang e usará o interpretador atual (já que .
ou source
é equivalente a apenas executar cada linha do script no shell atual)
Notas de rodapé
* 1: Isso é quase quase verdade. No bash eles são de fato o mesmo comando, mas quando usando source
, script
será procurado em $ PATH antes do diretório atual. Isso é bash, mas em shells somente POSIX, source
não funciona, mas .
faz. Então use o último para portabilidade.
* 2: o que realmente acontece é que executamos o binário sh com 'script' como argumento, o que fará com que 'sh' execute 'script' em seu novo shell