¿Cómo encuentro ayuda para el comando de punto `.` en * nix?

21

Necesito encontrar ayuda para el comando de puntos .como en . ./my_script.sh(me refiero al primer punto).

Ya he tratado de encontrar una página de manual usando man .y man \.. ¿Cómo puedo mostrar una página de manual en la que se explica el uso del comando .?

aturegano
fuente
14
@ C0deDaedalus: el nombre canónico para "." es PARADA COMPLETA. Lo que la gente llama depende de dónde fueron criados.
RedGrittyBrick
55
Sólo tiene que ejecutar:help .
kenorb
2
En los documentos, sin embargo, se llama dot. Consulte la especificación formal en pubs.opengroup.org/onlinepubs/009696699/utilities/dot.html
Charles Duffy el
11
@jamesqf .es un comando, específicamente un shell incorporado. En Bash es equivalente a source.
wjandrea
44
@jamesqf: .es POSIX, no solo bash. Por ejemplo, también está en zsh y ksh.
MSalters

Respuestas:

79

En primer lugar, debe invocar type ., probablemente obtendrá algo como:

. is a shell builtin

Los componentes integrados son parte de su caparazón, no tienen sus propias páginas de manual. Sin embargo, puede parecer que algunos de ellos los tienen, por ejemplo, echoestá integrado en Bash, pero lo más probable es que haya un ejecutable separado como /bin/echoen su sistema y en este caso se man echorefiere a este último . Estos dos echos probablemente no son estrictamente equivalentes.

Su caparazón puede proporcionar información sobre cualquier builtin a través de helpbuiltin; intente help help, help typey finalmente:

help .

Las incorporaciones también pueden aparecer en la página del manual de su shell. Por ejemplo (en mi Debian) los componentes internos de Bash están cubiertos directamente man bash, pero para los componentes internos de Zsh man zshme dice que corra man zshbuiltins. En general, los depósitos pueden explicar o no sus componentes incorporados.

Kamil Maciorowski
fuente
77
+1 para señalar que .es un shell incorporado y esto debe marcarse como respuesta porque OP pregunta how to find help for . in *nix ?.
C0deDaedalus
77
+1 para usar type .para demostrar que algunos comandos son componentes integrados de shell.
Roger Lipscombe
1
En la mayoría de Debian, los componentes integrados de Bash también se extraen a la bash-builtins(1)página del manual, que tiene un tamaño más conveniente.
Toby Speight
Además, invocar "tipo" solo funciona si está utilizando un shell que tiene un "tipo" incorporado. Si está utilizando tcsh, "escriba". da "tipo: Comando no encontrado".
jamesqf
1
Even . --helpworks
Digital Trauma
25

Intente usar man sho man basho la página man para cualquier shell que esté usando. (Tal vez man $SHELL)

Esto oficialmente no se llama el comando "punto", sino el sourcecomando. Buscar la palabra sourcepuede ser útil.

por ejemplo, bash man page (busca "cada comando incorporado") y encontrarás rápidamente la documentación.

En cuanto a explicar el uso, puedo hacer eso aquí mismo. Me referiré a esto como elsource comando, reconociendo que se puede abreviar a solo un período cuando está usando algunos shells, y con algunos shells ese comando podría ser necesario (porque el punto puede ser reconocido pero la palabra completa sourceno puede ser).

Si usas el source comando, su shell leerá cada línea del archivo de script e intentará ejecutarlo. Necesita permisos de "lectura" en el archivo. (No importa si tiene permisos de "ejecución"). Si modifica una variable, es probable que afecte a su shell actual.

Si, por otro lado, solo intenta ejecutar el archivo, su shell le pedirá al sistema operativo que se encargue de esta solicitud. Esto requerirá permisos de "ejecución". (En algunos sistemas, como OpenBSD, no necesitará permisos de "lectura" para esto. En otros sistemas, incluidas muchas variaciones de Unix, lo necesitará). Es posible que el archivo deba comenzar con un encabezado apropiado (por ejemplo, #!/bin/sh) el sistema reconoce que se trata de un archivo de script. El sistema operativo ejecutará una copia del shell solicitado y le indicará a ese shell que ejecute el contenido del script. Si se cambia el entorno de shell (por ejemplo, una variable obtiene un nuevo valor, se cambia el directorio de trabajo (con  cd), se redirige un descriptor de archivo (con exec), etc.), afectará solo al subconjunto que se llamó para el script y no puede modificar el entorno en el shell principal que llamó al archivo de script.

TOOGAM
fuente
15
Es solo sourceen bash. En la especificación POSIX, se llama "el comando punto" (y el sourcealias no es compatible).
Charles Duffy
1
Un script necesita permisos de lectura; de lo contrario, el intérprete no puede acceder a él. Consulte ¿Puede un script ser ejecutable pero no legible?
wjandrea
1
La ejecución de un script no abre un subconjunto, sino solo un proceso secundario normal, al igual que ejecutar un programa compilado. Vea esta respuesta en "¿Es una subcapa lo mismo que una cáscara secundaria?"
wjandrea
1
Entonces, escribo man bashy luego ¿qué /.? No muy útil /sourcesería útil, pero para eso necesitarías saber eso .y sourceson lo mismo.
Joker_vD
1
Encontré su párrafo "En cuanto a explicar el uso ..." un poco engañoso, ya que implica que podría ser .y podría ser source, pero como ya se mencionó @CharlesDuffy, siempre está . en cualquier shell compatible con POSIX y solo tiene el alias sourceen una concha
Tom Fenech
6

Nadie más lo ha mencionado, ya que a menudo se olvida.

Tu pista más grande vendría del comando útil 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

EDITAR:

Algunas personas han señalado en los comentarios que esto no está en algunas distribuciones, tal vez es un paquete instalable o habilitado de alguna manera, lo tenía por defecto en gentoo;)

Incluye el maravilloso cuál, que le dice qué ejecutable se llama y whereis, que le proporciona todas las rutas a un ejecutable que nombre, y sus páginas man (si existe en varias rutas).

djsmiley2k - Vaca
fuente
1
Buena pista, pero parece que no funciona en todas partes. Por ejemplo, en AIX con ksh, whatis .devuelveman: 0703-307 . is not found.
aturegano
44
whatis .no devuelve nada en Ubuntu 16.04
Vadim Kotov
Y ".: Nada apropiado". en OpenSuSE usando tcsh.
jamesqf
2
Ah, desde su propia página de manual: "whatis - muestra descripciones de páginas de manual de una línea". Entonces parece ser una versión muy muy corta del hombre.
Xen2050
Una opción más compatible puede ser: apropos (que debería ser lo mismo que ejecutar "man -k"). Por "." o "fuente" (que es parte de la palabra "recurso") esto no funciona demasiado bien, debido a demasiados falsos positivos, pero probablemente funcionaría para sus otros ejemplos (bash, lynx y whatis). En Debian Linux: " whatis ." dio " .: nothing appropriate." en OpenBSD, resultó en 47 líneas de salida. Para este ejemplo específico (usando " whatis ." en Gentoo), los resultados pueden ser poco comunes (lo que significa que esta técnica generalmente no es tan útil para muchos otros escenarios de ejemplo).
TOOGAM
4

man source le mostrará la explicación que necesita.

El punto es el mismo que el comando de origen.

source ejecuta el script en el shell actual en lugar de en un subshell (es la forma habitual).

El uso de sourcelas variables establecidas dentro del guión se conserva una vez que el guión ha finalizado.

jcbermu
fuente
2
¿En qué distribución (s) man sourcefunciona? No en mi Debian, de ahí la pregunta.
Kamil Maciorowski
1
Funciona en CentOS 6.5. Supongo que está más relacionado con la versión de bash. En mi caso es 4.1.2 (1)
jcbermu
@jcbermu, ninguna versión de bash envía una página de manual separada para el flujo sourceascendente; es más probable que algo lo haya hecho CentOS.
Charles Duffy
En mi sistema, man sourcete da man bash_builtins, lo que no explica nada, pero te remite abash(1)
Scott
1
En mi sistema (Ubuntu LTS) man sourceme da source(3tcl)... type commandy luego, si el comando está incorporado, help commandprobablemente sea la forma correcta ...
Hastur
0

El .es un sinónimo del sourcecomando shell y, por lo tanto, en bash , su sintaxis se muestra mediante ...

help source

Funciona exactamente como los comandos includey importen otros idiomas, ya que lee el archivo de destino y lo interpreta como si fuera parte del script actual. Por lo tanto, ese archivo se ejecutará en su totalidad antes de los comandos en el resto del script actual.

Por lo general, debe estar al comienzo del script actual y se usa con mayor frecuencia para cargar variables y / o definiciones de funciones.

DocSalvager
fuente