Cosa fa `. / path / command` do? (Spazio dopo punto, percorso assoluto)


7

Da questa guida al completamento di Bash apprendiamo che per eseguire il completamento automatico di Bash è necessario eseguire . /etc/etc/bash_completion.d/foobar( notare lo spazio dopo. ) affinché il completamento di Bash funzioni.

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

È .una scorciatoia per il sourcecomando? Altrimenti, che cos'è? È impossibile cercare su Google, man sourcenon restituisce nulla apropos sourcee info sourcefornire così tante informazioni irrilevanti che non posso dire se quello che sto cercando è lì. Come potrei anche iniziare a RTFM per trovare la risposta a questa domanda da solo?


Leggi la bashpagina man in quanto si tratta di un comando integrato, cerca la spiegazione della fonte, è difficile mancare.
Anthon,

3
.una scorciatoia per il comando sorgente?" - è davvero il contrario: .è il comando ed sourceè l'alias di compatibilità (per compatibilità con csh). Si noti che sourcenon esiste solo nella shell bourne POSIX standard ..
Celada,


Spesso quando è semplice rimane nascosto ... Può essere semplice come scrivere " aiuto ": dai un'occhiata qui sotto ;)
Hastur

Risposte:


14

.è identico alla sourcefunzione.

Come sempre il primo riferimento è la man bashpagina del manuale in cui è possibile confermare la tua ipotesi iniziale cercando/ source

... funzione shell o script eseguito con .o sorgente ...

è il primo riferimento, ma un po 'più avanti troverai una sezione Comandi integrati nella shell

. filename [arguments]
source filename [arguments]
Legge ed esegue i comandi dal nome file nell'ambiente shell corrente e restituisce lo stato di uscita dell'ultimo comando eseguito dal nome file. Se il nome file non contiene una barra, i nomi file in PATH vengono utilizzati per trovare la directory contenente il nome file. Il file cercato in PATH non deve essere eseguibile. Quando bash non è in modalità posix, viene cercata la directory corrente se non viene trovato alcun file in PATH. Se l'opzione sourcepath per il comando incorporato shopt è disattivata, il PERCORSO non viene cercato. Se vengono forniti argomenti, diventano i parametri posizionali quando viene eseguito il nome file. Altrimenti i parametri posizionali rimangono invariati. Lo stato di ritorno è lo stato dell'ultimo comando uscito dallo script (0 se non vengono eseguiti comandi) e falso se il nome file non viene trovato o non può essere letto.

Il fatto che sia una funzione incorporata in bash è il motivo per cui l'origine non viene fornita con la propria pagina man, motivo per cui l'apropos ha fallito.


Grazie, non avrei mai pensato di esibirmi man bash, ma lo aggiungerò alle mie tecniche "prova prima di pubblicare". Quella pagina sembra che ci vorranno mesi per rivedere e comprendere appieno, ci sto divertendo!
dotancohen,

Come sempre il primo riferimento è man bash? Sono sicuro che ho un problema con il sshcomando che non mi aiuterà molto. È più il riferimento dell'ultima risorsa.
Anthon,

Se stai scrivendo script bash e stai studiando il completamento automatico, sì, lo sarebbe sicuramente. Ma quella potrebbe essere la voce dell'esperienza.
HBruijn,

Il comando punto era nella shell Bourne ed è standardizzato nella shell POSIX. Il comando source era l'analogo nella shell C, e fu aggiunto a Bash (e non è standardizzato da POSIX).
Jonathan Leffler,

per i buildin bash puoi usare help, come in help sourceohelp .
Carlos Campderrós il

4

Le tue risposte in breve:

  1. . absolute_path/mycommand sorgente del file di script mycommandche si trova nella directory absolute_path/. Per ulteriori riferimenti leggi qui
  2. . esource sono equivalenti.
  3. Se necessario, chiedere helpa bash shellse stesso. Avrai una risposta per i comandi integrati.

Alcune parole in più
Spesso il modo più semplice è anche il più sfuggente: non pensavamo di poterlo chiedere helpalla shell stessa, quando i comandi sono definiti internamente.
Con type .e type sourcepossiamo notare che quelli sono comandi integrati .

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

Una volta che lo sappiamo, con helppossiamo avere alcune informazioni rapide su di loro.
Il comandohelp senza parametro dal prompt ci dà:

GNU bash, versione 4.1.2 (1) ...
Questi comandi di shell sono definiti internamente .
Digita helpper vedere questo elenco. Digita help nameper saperne di più sul nome della funzione .
Utilizzare info bashper saperne di più sulla shell in generale.
Usa man -k' orinfo 'per saperne di più sui comandi non in questo elenco.

Nel frattempo help ., oltre help sourcea ottenere lo stesso identico aiuto:

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.

"L'ovvio è ciò che non si vede mai fino a quando qualcuno non lo esprime semplicemente." K.Gibran


1

Questo punto "." significa leggere ed eseguire comandi dall'argomento nomefile nel contesto della shell corrente. È equivalente alla fonte. Questo stile proviene dalla shell Bourne e fare riferimento a http://ss64.com/bash/source.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.