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

7

A partir deste guia para a conclusão Bash aprendemos que para Bash para executar uma auto-realização deve executar . /etc/etc/bash_completion.d/foobar( observe o espaço após. ), para conclusão Bash ao trabalho.

$ /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

É .um atalho para o sourcecomando? Se não, então o que é? É impossível pesquisar no Google, man sourcenão retorna nada apropos sourcee info sourcefornece tantas informações irrelevantes que não sei dizer se o que estou procurando está lá. Como posso começar a RTFM para encontrar a resposta para essa pergunta?

dotancohen
fonte
Leia a bashpágina de manual, pois este é um comando interno, procure a explicação da fonte, é difícil perder.
Anthon
3
.um atalho para o comando de origem?" - é realmente o contrário: .é o comando e sourceé o alias de compatibilidade (para compatibilidade com csh). Observe que sourcenão existe apenas no shell padrão POSIX bourne ..
Celada
Muitas vezes, quando É simples ele permanece escondido ... Ele pode ser tão simples como escrever " ajuda ": dê uma olhada abaixo ;)
Hastur

Respostas:

14

Sim .é idêntico à sourcefunção.

Como sempre, a primeira referência é a man bashpágina de manual, onde você pode confirmar seu palpite inicial pesquisando/ source

... função ou script shell executado com .ou fonte ...

é a primeira referência, mas um pouco mais adiante você encontra uma seção Comandos internos do shell

. filename [arguments]
source filename [arguments]
Leia e execute comandos do nome do arquivo no ambiente de shell atual e retorne o status de saída do último comando executado a partir do nome do arquivo. Se o nome do arquivo não contiver uma barra, os nomes de arquivo no PATH serão usados ​​para localizar o diretório que contém o nome do arquivo. O arquivo procurado no PATH não precisa ser executável. Quando o bash não está no modo posix, o diretório atual é pesquisado se nenhum arquivo for encontrado no PATH. Se a opção sourcepath para o comando shopt builtin estiver desativada, o PATH não será pesquisado. Se algum argumento for fornecido, eles se tornarão os parâmetros posicionais quando o nome do arquivo for executado. Caso contrário, os parâmetros posicionais não serão alterados. O status de retorno é o status do último comando encerrado no script (0 se nenhum comando for executado) e falso se o nome do arquivo não for encontrado ou não puder ser lido.

O fato de ser uma função interna do bash é o motivo pelo qual a fonte não vem com sua própria página de manual, e é por isso que o propósito falhou.

HBruijn
fonte
Obrigado, nunca pensei em me apresentar man bash, mas acrescentarei isso às minhas técnicas "tente antes de postar". Parece que essa página levará meses para revisar e compreender completamente. Estou em um bom momento!
dotancohen
Como sempre, a primeira referência é man bash? Eu tenho certeza que tenho um problema com o sshcomando que não vai me ajudar muito. É mais a referência de último recurso.
Anthon
Se você estiver escrevendo scripts bash e investigando o preenchimento automático, sim, certamente seria. Mas essa pode ser a voz da experiência.
21715 HBruijn
O comando dot estava no shell Bourne e é padronizado no shell POSIX. O comando source era o analógico no shell C e foi adicionado ao Bash (e não é padronizado pelo POSIX).
Jonathan Leffler
para builtins festança você pode usar help, como em help sourceouhelp .
Carlos Campderrós
4

Suas respostas em breve:

  1. . absolute_path/mycommand fonte do arquivo de script mycommandque está no diretório absolute_path/. Para mais referências, leia aqui
  2. Sim . e sourcesão equivalentes.
  3. Quando necessário, pergunte helpa bash shellsi mesmo. Você terá uma resposta para comandos internos.

Algumas palavras mais
Freqüentemente, a maneira mais simples é a mais ilusória: não pensamos em pedir helpao próprio shell , quando os comandos são definidos internamente.
Com type .e type sourcepodemos notar que esses são built-in comandos.

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

Uma vez que conhecemos, helppodemos obter algumas informações rápidas sobre eles.
O comando helpsem parâmetro no prompt nos fornece:

GNU bash, versão 4.1.2 (1) ...
Esses comandos do shell são definidos internamente .
Digite helppara ver esta lista. Digite help namepara descobrir mais sobre o nome da função .
Use info bashpara descobrir mais sobre o shell em geral.
Use man -k' orinfo 'para descobrir mais sobre comandos que não estão nesta lista.

Enquanto isso, com help ., bem como help sourceobter a mesma idêntica ajuda:

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 exponha simplesmente". K.Gibran

Hastur
fonte
1

Este ponto "." significa ler e executar comandos do argumento filename no contexto atual do shell. É equivalente à fonte. Esse estilo é do shell Bourne e consulte http://ss64.com/bash/source.html

user94000
fonte