O comando (A) é chamado de fonte do arquivo, que consiste em comandos do shell. Ele não pode ser usado para executáveis binários (consulte man file
para obter informações sobre como determinar o tipo de um arquivo). Isso faz com que os comandos no arquivo sejam executados no ambiente atual como se eles tivessem sido digitados no prompt do shell. Os resultados afetam o ambiente atual e, portanto, podem fazer coisas como definir o valor de variáveis de ambiente e alterar diretórios, incluindo definições de funções, entre outras coisas. Não é necessário definir o bit de execução usando chmod. O arquivo precisa estar no diretório atual ou um caminho completo ou relativo * deve ser incluído ou o arquivo pode estar em um local que esteja na variável de ambiente PATH
(sujeito a se a opção sourcepath
de shopt
está definida ). Não é necessário especificar o diretório atual se é onde o arquivo está localizado. Estes são todos equivalentes:
$ ls
filename
$ . filename
results
$ ls /some/directory/filename
/some/directory/filename
$ . /some/directory/filename
results
$ cd /elsewhere
$ echo $PATH
/some/directory
$ . filename
results
O comando (B) faz com que o shell execute o arquivo apenas se o bit de execução estiver ativado para os direitos do usuário (consulte man chmod
). O arquivo pode ser um script de shell, um executável binário ou outro script, como Perl ou Python (ou escrito em um shell diferente). Se não houver nenhuma barra no nome (nenhum diretório é especificado), o arquivo deverá estar localizado em um diretório incluído na variável de ambiente PATH
. É possível incluir o diretório atual no caminho, mas não o recomendo porque é um risco de segurança. Estes são equivalentes:
$ echo $PATH
/some/directory
$ filename
results
$ /some/directory/filename
results
O comando (C) é essencialmente o mesmo que o comando (B), mas especifica o diretório atual que é referido como "." (assim como o diretório pai é referido como "..". O PATH não será pesquisado para localizar o arquivo desde que um diretório seja especificado.
[*] Um caminho relativo é aquele que não inicia com uma barra (/). Especifica uma localização relativa ao diretório atual. "this / is / a / subdir" existe como um caminho de diretório sob o atual como "./this/is/a/subdir" (que especifica o mesmo diretório). "../another/set/of/dirs" é um conjunto de diretórios abaixo do pai do atual.