O que faz '. / path / command 'do? (Espaço após ponto, caminho absoluto)

8

De este guia para a conclusão do Bash , aprendemos que, para que o Bash execute o preenchimento automático, deve executar . /etc/etc/bash_completion.d/foobar ( anote o espaço após . ) para que o preenchimento Bash funcione.

$ /etc/bash_completion.d/ssh
bash: /etc/bash_completion.d/ssh: Permission denied
$ . /etc/bash_completion.d/ssh
$ ls -l /etc/bash_completion.d | grep ssh
-rw-r--r-- 1 root root   297 Jan 28 18:04 ssh

O . é um atalho para o comando source ? Se não, então o que é? É impossível procurar no google, man source não retorna nada e apropos source e info source fornecem tantas informações irrelevantes que não sei dizer se o que estou procurando está lá. Como eu poderia começar a usar o RTFM para encontrar a resposta para essa pergunta?

    
por dotancohen 01.02.2015 / 09:16

3 respostas

14

Sim . é idêntico à função source .

Como sempre, a primeira referência é a man bash página de manual em que você pode confirmar sua suposição inicial pesquisando por / source

...shell function or script executed with . or source...

é a primeira referência, mas um pouco mais você encontra uma seção Comandos Embutidos da Shell

. filename [arguments]
source filename [arguments]
Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename. If filename does not contain a slash, file names in PATH are used to find the directory containing filename. The file searched for in PATH need not be executable. When bash is not in posix mode, the current directory is searched if no file is found in PATH. If the sourcepath option to the shopt builtin command is turned off, the PATH is not searched. If any arguments are supplied, they become the positional parameters when filename is executed. Otherwise the positional parameters are unchanged. The return status is the status of the last command exited within the script (0 if no commands are executed), and false if filename is not found or cannot be read.

O fato de ser uma função interna bash é a razão pela qual a fonte não vem com sua própria página man, e é por isso que a proposta falhou.

    
por 01.02.2015 / 09:29
5

Suas respostas são breves:

  1. . absolute_path/mycommand source o arquivo de script mycommand que está no diretório absolute_path/ . Para mais referências leia aqui
  2. Sim . e source são equivalentes.
  3. Quando necessário, peça help para bash shell . Você terá uma resposta para comandos incorporados.

Algumas palavras mais
Muitas vezes a maneira mais simples é a mais elusiva também: nós não achamos que podemos perguntar help para o shell , quando os comandos são definidos internamente.
Com type . e type source , podemos notar que esses são comandos integrados .

Hastur@Cthulhu:~> type . source  
. is a shell builtin  
source is a shell builtin

Uma vez que sabemos, com help , podemos ter algumas informações rápidas sobre eles. O comando help sem parâmetro do prompt nos fornece:

GNU bash, version 4.1.2(1)...
These shell commands are defined internally.
Type help to see this list. Type help name to find out more about the function name.
Use info bash to find out more about the shell in general.
Use man -k' orinfo' to find out more about commands not in this list.

Enquanto isso, com help . e help source , você obtém a mesma ajuda idêntica :

source: source filename [arguments]
Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.

"O óbvio é o que nunca é visto até que alguém o expresse simplesmente." K. Gibran

    
por 01.02.2015 / 11:21
1

Este ponto "." significa ler e executar comandos do argumento filename no contexto shell atual. É equivalente a fonte. Este estilo é da Bourne shell, e por favor consulte link

    
por 01.02.2015 / 09:35

Tags