Wie finde ich in * nix Hilfe zum Punktbefehl `.`?

21

Ich brauche Hilfe für Punktbefehle .wie in . ./my_script.sh(ich meine den ersten Punkt.)

Ich habe bereits versucht, mit man .und eine Manpage zu finden man \.. Wie kann ich eine Manpage anzeigen, in der die Verwendung von Befehlen erläutert wird .?

Aturegano
quelle
14
@ C0deDaedalus: Der kanonische Name für "." ist FULL STOP. Wie die Leute es nennen, hängt davon ab, wo sie aufgewachsen sind.
RedGrittyBrick
5
Führen Sie einfach:help .
Kenorb
2
In den Dokumenten heißt es jedoch dot. Siehe die formale Spezifikation unter pubs.opengroup.org/onlinepubs/009696699/utilities/dot.html
Charles Duffy
11
@jamesqf .ist ein Befehl, insbesondere eine eingebaute Shell. In Bash ist es gleichbedeutend mit source.
wjandrea
4
@jamesqf: .ist POSIX, nicht nur bash. ZB ist es auch in zsh und ksh.
MSalters

Antworten:

79

Als Erstes sollten Sie Folgendes aufrufen type .:

. is a shell builtin

Builtins sind Teile Ihrer Shell, sie haben keine eigenen Manualpages. Einige von ihnen scheinen sie zwar zu haben, zB echoist sie in Bash eingebaut, aber höchstwahrscheinlich gibt es eine separate ausführbare Datei wie /bin/echoin Ihrem System und in diesem Fall man echobezieht sie sich auf die letztere . Diese beiden echosind wahrscheinlich nicht genau gleichwertig.

Ihre Shell kann über helpbuiltin Informationen zu allen eingebauten Elementen bereitstellen. versuchen help help, help typeund schließlich:

help .

Builtins können auch in der Manualpage Ihrer Shell aufgeführt sein. ZB (in meinem Debian) Bash-Buildins werden direkt in behandelt man bash, aber für Zsh-Buildins muss man zshich sie ausführen man zshbuiltins. Im Allgemeinen können Shells ihre Buildins erklären oder nicht.

Kamil Maciorowski
quelle
7
+1 für das Zeigen, dass .eine Shell eingebaut ist und Dies sollte als Antwort markiert werden, da OP fragt how to find help for . in *nix ?.
C0deDaedalus
7
+1 für die Verwendung von type ., um zu demonstrieren, dass einige Befehle Shell-Builtins sind.
Roger Lipscombe
1
In den meisten Debian-Versionen werden Bash-Buildins auch in die bash-builtins(1)Manual-Seite extrahiert, die eine bequemere Größe hat.
Toby Speight
Das Aufrufen von "type" funktioniert auch nur, wenn Sie eine Shell verwenden, in die ein "type" integriert ist. Wenn Sie tcsh verwenden, geben Sie "" ein. gibt "Typ: Befehl nicht gefunden."
Jamesqf
1
Auch . --helpfunktioniert
Digital Trauma
25

Versuchen Sie, man shoder man bashoder die Manpage für die von Ihnen verwendete Shell zu verwenden. (Vielleicht man $SHELL.)

Dies wird offiziell nicht als "Punkt" -Befehl bezeichnet, sondern als sourceBefehl. Das Suchen nach dem Wort sourcekann hilfreich sein.

zB bash man page (suche nach "jedem eingebauten Befehl"), und du wirst schnell die Dokumentation finden.

Zur Erläuterung der Verwendung kann ich das hier tun. Ich werde dies nur als den sourceBefehl bezeichnen und erkennen, dass er auf einen Zeitraum abgekürzt werden kann, in dem Sie einige Shells verwenden, und dass dieser Befehl bei einigen Shells möglicherweise erforderlich ist (da der Punkt möglicherweise erkannt wird, das gesamte Wort jedoch sourcemöglicherweise nicht) Sein).

Wenn Sie den sourceBefehl verwenden, liest Ihre Shell jede Zeile aus der Skriptdatei und versucht, sie auszuführen. Sie benötigen Leseberechtigungen für die Datei. (Es spielt keine Rolle, ob Sie über Ausführungsberechtigungen verfügen.) Wenn Sie eine Variable ändern, kann dies die aktuelle Shell beeinträchtigen.

Wenn Sie andererseits nur versuchen, die Datei auszuführen, fordert Ihre Shell das Betriebssystem auf, sich um diese Anforderung zu kümmern. Dies erfordert "Ausführen" -Berechtigungen. (Auf einigen Systemen, wie OpenBSD, werden dafür keine "Lese" -Rechte benötigt. Auf anderen Systemen, einschließlich vieler Unix-Variationen, werden Sie dies tun.) Die Datei muss möglicherweise mit einem entsprechenden Header (z. B. #!/bin/sh) beginnen, damit sie ausgeführt werden kann Das System erkennt dies als Skriptdatei. Das Betriebssystem führt eine Kopie der angeforderten Shell aus und weist diese Shell an, den Inhalt des Skripts auszuführen. Wenn die Shell - Umgebung geändert wird (z. B. eine Variable einen neuen Wert erhält, wird das Arbeitsverzeichnis geändert (mit  cd), ein Dateideskriptor wird umgeleitet (mit) exec) usw.) betrifft nur die Sub-Shell, die für das Skript aufgerufen wurde, und kann die Umgebung in der übergeordneten Shell, die die Skriptdatei aufgerufen hat, nicht ändern.

TOOGAM
quelle
15
Es ist nur sourcein Bash. In der POSIX-Spezifikation heißt es "the dot command" (und der sourceAlias ​​wird nicht unterstützt).
Charles Duffy
1
Ein Skript benötigt Leserechte, sonst kann der Interpreter nicht darauf zugreifen. Siehe Kann ein Skript ausführbar, aber nicht lesbar sein?
wjandrea
1
Das Ausführen eines Skripts öffnet keine Sub-Shell, sondern nur einen normalen untergeordneten Prozess, genau wie das Ausführen eines kompilierten Programms. Lesen Sie diese Antwort unter "Ist eine Sub-Shell dasselbe wie eine Child-Shell?"
wjandrea
1
Also, ich tippe man bashund was dann /.? Nicht sehr nützlich. /sourcewäre nützlich, aber dafür müsst ihr das wissen .und sourceseid dasselbe.
Joker_vD
1
Ich fand Ihren Absatz „Wie für die Verwendung zu erklären ...“ etwas irreführend, da es bedeutet , dass es vielleicht sein , .und es könnte sein source, aber wie @CharlesDuffy bereits erwähnt, es ist immer . in jedem POSIX-kompatiblen Shell und hat nur die Aliasnamen sourcein eine Schale.
Tom Fenech
6

Niemand sonst hat es erwähnt, wie es oft vergessen wird.

Ihr größter Hinweis würde vom hilfreichen Befehl kommen whatis.

tim@musha ~ $ whatis .
builtins (1)         - bash built-in commands, see bash(1)
tim@musha ~ $ whatis source
builtins (1)         - bash built-in commands, see bash(1)
tim@musha ~ $ whatis bash
bash (1)             - GNU Bourne-Again SHell
tim@musha ~ $ whatis lynx
lynx (1)             - a general purpose distributed information browser for the World Wide Web
tim@musha ~ $ whatis linux
linux: nothing appropriate.
tim@musha ~ $ whatis whatis
whatis (1)           - display one-line manual page descriptions

BEARBEITEN:

Einige Leute haben in den Kommentaren darauf hingewiesen, dass dies in einigen Distributionen nicht der Fall ist - vielleicht handelt es sich um ein installierbares Paket oder wie es aktiviert wurde - ich hatte es standardmäßig in gentoo;)

Es enthält das wunderbare Was - welches Ihnen sagt, welche ausführbare Datei aufgerufen wird, und wo es Ihnen alle Pfade zu einer ausführbaren Datei gibt, die Sie benennen, sowie Manpages (falls diese in mehreren Pfaden vorhanden sind).

djsmiley2k - CoW
quelle
1
Guter Tipp, aber es scheint, dass es nicht überall funktioniert. Zum Beispiel in AIX mit KSH, whatis .kehrtman: 0703-307 . is not found.
aturegano
4
whatis .gibt auf Ubuntu 16.04
Vadim Kotov
Und ".: Nichts passendes." unter OpenSuSE mit tcsh.
Jamesqf
2
Ah, von seiner eigenen Manpage: "whatis - zeige einzeilige Manualseitenbeschreibungen an." Es scheint also eine sehr sehr kurze Version des Menschen zu sein.
Xen2050
Eine kompatiblere Option könnte sein: apropos (sollte mit "man -k" identisch sein). Zum "." oder "source" (was Teil des Wortes "resource" ist), funktioniert aufgrund zu vieler falsch positiver Ergebnisse nicht so gut, würde aber wahrscheinlich für Ihre anderen Beispiele (bash, lynx und whatis) funktionieren. Unter Debian Linux " whatis ." gab " .: nothing appropriate." es unter OpenBSD 47 Ausgabezeilen. Für dieses spezielle Beispiel (Verwendung von " whatis ." in Gentoo) sind die Ergebnisse möglicherweise nur ungewöhnlich gut (was bedeutet, dass diese Technik für viele andere Beispielszenarien im Allgemeinen nicht so nützlich ist).
TOOGAM
4

man source zeigt die Erklärung, die Sie benötigen.

Der Punkt ist derselbe wie der Quellbefehl.

source Führt das Skript in der aktuellen Shell statt in einer Subshell aus (wie üblich).

Die Verwendung sourceder im Skript festgelegten Variablen bleibt nach Abschluss des Skripts erhalten.

jcbermu
quelle
2
In welcher Distribution man sourcefunktioniert das? Nicht in meinem Debian, daher die Frage.
Kamil Maciorowski
1
Es funktioniert in CentOS 6.5. Ich denke, es hängt mehr mit der Version von Bash zusammen. In meinem Fall ist 4.1.2 (1)
jcbermu
@jcbermu, keine Version von bash liefert eine separate Manpage für den sourceUpstream - das ist wahrscheinlicher, als CentOS es getan hat.
Charles Duffy
Auf meinem System man sourcegibt Ihnen man bash_builtins, was nichts erklärt, sondern verweist Sie aufbash(1)
Scott
1
Auf meinem System (Ubuntu LTS) man sourcegibt es mich source(3tcl)... type commandund dann, wenn der Befehl ein eingebauter help commandist, ist wahrscheinlich der richtige Weg ...
Hastur
0

Das .ist ein Synonym für den Shell- sourceBefehl und in der Bash wird seine Syntax von ...

help source

Es funktioniert genau wie der Befehl includeund importin anderen Sprachen, da es die Zieldatei liest und so interpretiert, als wäre es Teil des aktuellen Skripts. Somit wird diese Datei in ihrer Gesamtheit vor den Befehlen im Rest des aktuellen Skripts ausgeführt.

Es sollte sich normalerweise am Anfang des aktuellen Skripts befinden und wird am häufigsten zum Laden von Variablen und / oder Funktionsdefinitionen verwendet.

DocSalvager
quelle