Was macht `. / path / command` tun? (Leerzeichen nach Punkt, absoluter Pfad)

7

Aus dieser Anleitung zur Bash-Vervollständigung erfahren wir, dass Bash eine automatische Vervollständigung durchführen muss . /etc/etc/bash_completion.d/foobar( beachten Sie das Leerzeichen danach. ), damit die Bash-Vervollständigung funktioniert.

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

Ist .eine Verknüpfung für den sourceBefehl? Wenn nicht, was ist es dann? Es ist unmöglich, google man sourcezurückkehrt nichts, und apropos sourceund info sourcegibt so viele irrelevanten Informationen , dass ich nicht sagen kann , ob das, was ich suche da drin ist. Wie könnte ich überhaupt anfangen, bei RTFM die Antwort auf diese Frage selbst zu finden?

dotancohen
quelle
Lesen Sie die bashManpage, da dies ein eingebauter Befehl ist. Suchen Sie nach der Erklärung für die Quelle. Es ist schwer zu übersehen.
Anthon
3
"Ist .eine Verknüpfung für den Quellbefehl?" - es ist wirklich umgekehrt: .ist der Befehl und sourceist der Kompatibilitätsalias (aus Kompatibilitätsgründen mit csh). Beachten Sie, dass sourcedies nicht nur in der Standard-POSIX-Bourne-Shell vorhanden ist ..
Celada
Oft, wenn es einfach ist, bleibt es verborgen ... Es kann so einfach sein, " Hilfe " zu schreiben : werfen Sie einen Blick unten ;)
Hastur

Antworten:

14

Ja .ist identisch mit der sourceFunktion.

Wie immer ist die erste Referenz die man bashHandbuchseite, auf der Sie Ihre anfängliche Vermutung durch Suchen bestätigen können/ source

... Shell-Funktion oder Skript ausgeführt mit .oder Quelle ...

ist die erste Referenz, aber etwas weiter finden Sie einen Abschnitt Shell Builtin Commands

. filename [arguments]
source filename [arguments]
Lesen und Ausführen von Befehlen aus dem Dateinamen in der aktuellen Shell-Umgebung und Zurückgeben des Beendigungsstatus des zuletzt aus dem Dateinamen ausgeführten Befehls. Wenn der Dateiname keinen Schrägstrich enthält, werden Dateinamen in PATH verwendet, um das Verzeichnis zu finden, das den Dateinamen enthält. Die in PATH gesuchte Datei muss nicht ausführbar sein. Wenn sich bash nicht im Posix-Modus befindet, wird das aktuelle Verzeichnis durchsucht, wenn in PATH keine Datei gefunden wird. Wenn die Quellpfadoption für den eingebauten Befehl shopt deaktiviert ist, wird der PFAD nicht durchsucht. Wenn Argumente angegeben werden, werden diese zu Positionsparametern, wenn der Dateiname ausgeführt wird. Ansonsten bleiben die Positionsparameter unverändert. Der Rückgabestatus ist der Status des letzten im Skript beendeten Befehls (0, wenn keine Befehle ausgeführt werden) und false, wenn der Dateiname nicht gefunden wird oder nicht gelesen werden kann.

Die Tatsache, dass es sich um eine integrierte Bash-Funktion handelt, ist der Grund dafür, dass die Quelle keine eigene Manpage enthält, weshalb apropos fehlgeschlagen ist.

HBruijn
quelle
Vielen Dank, ich hätte nie daran gedacht, aufzutreten man bash, aber ich werde das zu meinen Techniken "Vor dem Posten versuchen" hinzufügen. Es sieht so aus, als würde ich Monate brauchen, um diese Seite vollständig zu überprüfen und zu verstehen. Ich bin auf einer guten Zeit!
Dotancohen
Wie immer ist die erste Referenz man bash? Ich bin sicher, wenn ich ein Problem mit dem sshBefehl habe, hilft mir das nicht viel. Es ist eher die Referenz des letzten Auswegs.
Anthon
Wenn Sie Bash-Skripte schreiben und die automatische Vervollständigung untersuchen, ist dies sicherlich der Fall. Aber das kann die Stimme der Erfahrung sein.
HBruijn
Der Punktbefehl befand sich in der Bourne-Shell und ist in der POSIX-Shell standardisiert. Der Quellbefehl war das Analogon in der C-Shell und wurde zu Bash hinzugefügt (und ist von POSIX nicht standardisiert).
Jonathan Leffler
für Bash Builtins können Sie verwenden help, wie in help sourceoderhelp .
Carlos Campderrós
4

Ihre Antworten in Kürze:

  1. . absolute_path/mycommand Geben Sie die Skriptdatei ein mycommand, die sich im Verzeichnis befindet absolute_path/. Weitere Referenzen finden Sie hier
  2. Ja . und sourcesind gleichwertig.
  3. Bei Bedarf bitten helpzu bash shellihnen. Sie erhalten eine Antwort auf integrierte Befehle.

Einige Wörter mehr
Oft ist der einfachste Weg auch der schwer fassbare: Wir dachten nicht, dass wir helpdie Shell selbst fragen können, wenn Befehle intern definiert werden.
Mit type .und können type sourcewir feststellen, dass dies eingebaute Befehle sind.

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

Sobald wir es wissen, helpkönnen wir einige schnelle Informationen über sie haben.
Der Befehl helpohne Parameter an der Eingabeaufforderung gibt uns:

GNU bash, Version 4.1.2 (1) ...
Diese Shell-Befehle werden intern definiert .
Geben Sie ein help, um diese Liste anzuzeigen. Geben Sie help namemehr über die Funktion , um herauszufinden Namen .
Verwenden info bashSie diese Option , um mehr über die Shell im Allgemeinen zu erfahren.
Verwenden Sie man -k' orinfo ', um mehr über Befehle zu erfahren, die nicht in dieser Liste enthalten sind.

Inzwischen erhalten Sie mit help .sowie help sourcedie gleiche identische Hilfe:

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.

"Das Offensichtliche ist das, was man nie sieht, bis jemand es einfach ausdrückt." K. Gibran

Hastur
quelle
1

Dieser Punkt "." bedeutet das Lesen und Ausführen von Befehlen aus dem Dateinamenargument im aktuellen Shell-Kontext. Es entspricht der Quelle. Dieser Stil stammt aus der Bourne-Shell und wird unter http://ss64.com/bash/source.html abgerufen

user94000
quelle