Comment puis-je trouver de l'aide pour la commande de point `.` dans * nix?

21

J'ai besoin de trouver de l'aide pour la commande de point .comme dans . ./my_script.sh(je veux dire le premier point.)

J'ai déjà essayé de trouver une page de manuel à l'aide de man .et man \.. Comment afficher une page de manuel dans laquelle elle explique l'utilisation de la commande .?

aturegano
la source
14
@ C0deDaedalus: Le nom canonique de "." est FULL STOP. Ce que les gens appellent cela dépend de l'endroit où ils ont grandi.
RedGrittyBrick
5
Il suffit de courir:help .
kenorb
2
Dans les documents, cependant, cela s'appelle dot. Voir les spécifications formelles sur pubs.opengroup.org/onlinepubs/009696699/utilities/dot.html
Charles Duffy
11
@jamesqf .est une commande, en particulier une fonction intégrée au shell. Dans Bash, c'est équivalent à source.
wjandrea
4
@jamesqf: .est POSIX, pas seulement bash. Par exemple, c'est aussi en zsh et ksh.
MSalters

Réponses:

79

Tout d'abord, vous devez invoquer type ., vous obtiendrez probablement quelque chose comme:

. is a shell builtin

Les builtins font partie de votre shell, ils n'ont pas leurs propres pages de manuel. Certains d'entre eux peuvent cependant sembler en avoir, par exemple, il echos'agit d'un module intégré à Bash, mais il est très probable qu'il existe un exécutable distinct comme /bin/echodans votre système et, dans ce cas, se man echoréfère à ce dernier . Ces deux echos ne sont probablement pas strictement équivalents.

Votre shell peut fournir des informations sur tout module intégré via le helpmodule intégré; essayez help help, help typeet enfin:

help .

Les Builtins peuvent également être listés dans la page de manuel de votre shell. Par exemple (dans mon Debian) les compilations Bash sont couvertes directement man bash, mais pour les compilations Zsh, il man zshme dit de courir man zshbuiltins. En général, les obus peuvent expliquer ou non leur intégration.

Kamil Maciorowski
la source
7
+1 pour le pointage qui .est un shell intégré et cela devrait être marqué comme réponse car OP le demande how to find help for . in *nix ?.
C0deDaedalus
7
+1 pour l'utilisation de type .pour démontrer que certaines commandes sont des commandes intégrées au shell.
Roger Lipscombe
1
Sur la plupart des Debian, les commandes internes Bash sont également extraites vers la bash-builtins(1)page de manuel, qui est d'une taille plus pratique.
Toby Speight
De plus, l'invocation de "type" ne fonctionne que si vous utilisez un shell qui a un "type" intégré. S'il vous arrive d'utiliser tcsh, "tapez". donne "type: Commande introuvable."
jamesqf
1
Même . --helpfonctionne
Trauma numérique
25

Essayez d'utiliser man shou man bashou la page de manuel pour le shell que vous utilisez. (Peut-être man $SHELL.)

Ceci n'est officiellement pas appelé la commande "point", mais la sourcecommande. La recherche du mot sourcepeut être utile.

par exemple, la page de manuel bash (recherchez «chaque commande intégrée»), et vous trouverez rapidement la documentation.

Quant à expliquer l'utilisation, je peux le faire ici. Je vais simplement faire référence à cela comme la sourcecommande, reconnaissant qu'elle peut être abrégée en une période lorsque vous utilisez des shells, et avec certains shells, cette commande pourrait avoir besoin d'être (car le point peut être reconnu mais le mot entier sourcepeut ne pas être être).

Si vous utilisez la sourcecommande, votre shell lira chaque ligne du fichier de script et tentera de l'exécuter. Vous avez besoin des autorisations de "lecture" sur le fichier. (Peu importe si vous avez des autorisations "exécuter".) Si vous modifiez une variable, cela est susceptible d'affecter votre shell actuel.

Si, en revanche, vous essayez simplement d'exécuter le fichier, votre shell demandera au système d'exploitation de prendre en charge cette demande. Cela nécessitera des autorisations «exécuter». (Sur certains systèmes, comme OpenBSD, vous n'aurez pas besoin d'autorisations de "lecture" pour cela. Sur d'autres systèmes, y compris de nombreuses variantes Unix, vous le ferez.) Le fichier devra peut-être commencer par un en-tête approprié (par exemple, #!/bin/sh) afin le système reconnaît qu'il s'agit d'un fichier de script. Le système d'exploitation exécutera une copie du shell demandé et indiquera à ce shell d'exécuter le contenu du script. Si l'environnement shell est modifié (par exemple, une variable obtient une nouvelle valeur, le répertoire de travail est modifié (avec  cd), un descripteur de fichier est redirigé (avec exec), etc.), cela n'affectera que le sous-shell qui a été appelé pour le script, et ne peut pas modifier l'environnement dans le shell parent qui a appelé le fichier de script.

TOOGAM
la source
15
C'est seulement sourceen bash. Dans la spécification POSIX, elle est appelée "la commande dot" (et l' sourcealias n'est pas pris en charge).
Charles Duffy
1
Un script a besoin d'autorisations de lecture, sinon l'interpréteur ne peut pas y accéder. Voir Un script peut-il être exécutable mais non lisible?
wjandrea
1
L'exécution d'un script n'ouvre pas un sous-shell, mais juste un processus enfant normal, tout comme l'exécution d'un programme compilé. Voir cette réponse sur "Un sous-shell est-il la même chose qu'un enfant-shell?"
wjandrea
1
Alors je tape man bashet puis quoi /.? Pas très utile. /sourceserait utile, mais pour cela, vous devez le savoir .et sourcec'est la même chose.
Joker_vD
1
J'ai trouvé votre paragraphe "Quant à expliquer l'utilisation ..." un peu trompeur, car cela implique qu'il pourrait l' être .et qu'il pourrait l' être source, mais comme @CharlesDuffy l'a déjà mentionné, il est toujours . dans n'importe quel shell compatible POSIX et n'a que l'alias sourcedans une coquille.
Tom Fenech
6

Personne d'autre ne l'a mentionné, car il est souvent oublié.

Votre plus gros indice proviendrait de la commande utile 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

MODIFIER:

Certaines personnes ont souligné dans les commentaires que ce n'est pas dans certaines distrobutions - c'est peut-être un package installable, ou activé un peu comment - je l'avais par défaut dans gentoo;)

Il comprend le merveilleux qui - qui vous indique quel exécutable est appelé, et whereis qui vous donne tous les chemins vers un exécutable que vous nommez, et ce sont les pages de manuel (s'il existe dans plusieurs chemins).

djsmiley2k - CoW
la source
1
Bon indice mais il semble que ça ne marche pas partout. Par exemple, dans AIX avec ksh, whatis .renvoieman: 0703-307 . is not found.
aturegano
4
whatis .ne renvoie rien sur Ubuntu 16.04
Vadim Kotov
Et ".: Rien de approprié." sur OpenSuSE en utilisant tcsh.
jamesqf
2
Ah, à partir de sa propre page de manuel: "whatis - affiche les descriptions de page de manuel sur une ligne." Il semble donc que ce soit une version très très courte de l'homme.
Xen2050
Une option plus compatible peut être: apropos (qui devrait être identique à l'exécution de "man -k"). Pour "." ou "source" (qui fait partie du mot "ressource"), cela ne fonctionne pas trop bien, en raison d'un trop grand nombre de faux positifs, mais cela fonctionnerait probablement pour vos autres exemples (bash, lynx et whatis). Sur Debian Linux: " whatis ." a donné " .: nothing appropriate." sur OpenBSD, cela a donné 47 lignes de sortie. Pour cet exemple spécifique (en utilisant " whatis ." dans Gentoo), les résultats peuvent s'avérer être exceptionnellement bons (ce qui signifie que cette technique n'est généralement pas aussi utile pour de nombreux autres exemples).
TOOGAM
4

man source montrera l'explication dont vous avez besoin.

Le point est le même que la commande source.

source exécute le script dans le shell courant plutôt que dans un sous-shell (c'est la manière habituelle).

L'utilisation sourcedes variables définies dans le script est conservée une fois le script terminé.

jcbermu
la source
2
Dans quelle (s) distribution (s) man sourcefonctionne? Pas dans mon Debian, d'où la question.
Kamil Maciorowski
1
Cela fonctionne dans CentOS 6.5. Je suppose que c'est plus lié à la version de bash. Dans mon cas est 4.1.2 (1)
jcbermu
@jcbermu, aucune version de bash ne fournit une page de manuel séparée pour l' sourceamont - c'est probablement quelque chose que CentOS a fait.
Charles Duffy
Sur mon système, man sourcevous donne man bash_builtins, ce qui n'explique rien, mais vous renvoie àbash(1)
Scott
1
Sur mon système (Ubuntu LTS) man sourceme donne source(3tcl)... type commandet puis si la commande est un builtin help commandc'est probablement la bonne façon ...
Hastur
0

Le .est un synonyme de la sourcecommande shell et donc en bash , sa syntaxe est affichée par ...

help source

Il fonctionne exactement comme les commandes includeet importdans d'autres langues en ce qu'il lit le fichier cible et l'interprète comme s'il faisait partie du script actuel. Ainsi, ce fichier s'exécutera dans son intégralité avant les commandes du reste du script en cours.

Il doit généralement se trouver au début du script en cours et est le plus souvent utilisé pour charger des variables et / ou des définitions de fonction.

DocSalvager
la source