¿Qué significa `. / ruta / comando` do? (Espacio tras punto, ruta absoluta)

7

De esta guía a la finalización de Bash , aprendemos que para que Bash realice la finalización automática, uno debe realizar . /etc/etc/bash_completion.d/foobar( observe el espacio después. ) para que la finalización de Bash funcione.

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

¿Es .un atajo para el sourcecomando? Si no, entonces ¿qué es? Es imposible buscar en Google, man sourceno devuelve nada apropos sourcey info sourcedar tanta información irrelevante que no puedo decir si lo que estoy buscando está ahí. ¿Cómo podría comenzar a RTFM para encontrar la respuesta a esta pregunta yo mismo?

dotancohen
fuente
Lea la bashpágina del manual, ya que este es un comando integrado, busque la explicación de la fuente, es difícil pasarla por alto.
Anthon
3
"¿Es .un atajo para el comando de origen?" - es realmente al revés: .es el comando y sourcees el alias de compatibilidad (para compatibilidad con csh). Tenga en cuenta que sourceno existe solo en el shell POSIX estándar de bourne ..
Celada
Consulte también unix.stackexchange.com/questions/182219
JdeBP
A menudo, cuando es simple, permanece oculto ... Puede ser tan simple como escribir " ayuda ": eche un vistazo a continuación ;)
Hastur

Respuestas:

14

.es idéntico a la sourcefunción.

Como siempre, la primera referencia es la man bashpágina del manual donde puede confirmar su conjetura inicial buscando/ source

... función de shell o script ejecutado con .o fuente ...

es la primera referencia, pero un poco más adelante encontrará una sección Comandos incorporados de Shell

. filename [arguments]
source filename [arguments]
Lea y ejecute comandos del nombre del archivo en el entorno actual del shell y devuelva el estado de salida del último comando ejecutado del nombre del archivo. Si el nombre de archivo no contiene una barra inclinada, los nombres de archivo en PATH se utilizan para encontrar el directorio que contiene el nombre de archivo. El archivo buscado en PATH no necesita ser ejecutable. Cuando bash no está en modo posix, se busca en el directorio actual si no se encuentra ningún archivo en PATH. Si la opción sourcepath del comando incorporado shopt está desactivada, no se busca la RUTA. Si se proporcionan argumentos, se convierten en los parámetros posicionales cuando se ejecuta el nombre de archivo. De lo contrario, los parámetros posicionales no cambian. El estado de retorno es el estado del último comando que salió de la secuencia de comandos (0 si no se ejecuta ningún comando) y falso si el nombre de archivo no se encuentra o no se puede leer.

El hecho de que sea una función incorporada bash es la razón por la que la fuente no viene con su propia página de manual, por lo que falló a propósito.

HBruijn
fuente
Gracias, nunca hubiera pensado realizar man bash, pero lo agregaré a mis técnicas de "probar antes de publicar". Parece que esa página me llevará meses revisar y comprender completamente, ¡me lo pasaré bien!
dotancohen 01 de
Como siempre, la primera referencia es man bash? Estoy seguro de que si tengo un problema con el sshcomando que no me ayudará mucho. Es más la referencia de último recurso.
Anthon
Si está escribiendo scripts de bash e investigando la finalización automática, sí lo sería. Pero esa puede ser la voz de la experiencia.
HBruijn 01 de
El comando dot estaba en el shell Bourne y está estandarizado en el shell POSIX. El comando fuente era el análogo en el shell C, y se agregó a Bash (y POSIX no lo estandariza).
Jonathan Leffler
para bash builtins que puede usar help, como en help sourceohelp .
Carlos Campderrós
4

Sus respuestas breves:

  1. . absolute_path/mycommand fuente el archivo de comandos mycommandque se encuentra en el directorio absolute_path/. Para más referencias lea aquí
  2. Si . y sourceson equivalentes.
  3. Cuando sea necesario, pregúntese helpa bash shellsí mismo. Tendrá una respuesta para los comandos integrados.

Algunas palabras más
A menudo, la forma más simple es también la más difícil de alcanzar: no pensamos que podemos preguntar helpal shell en sí, cuando los comandos se definen internamente.
Con type .y type sourcepodemos notar que esos son comandos integrados .

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

Una vez que lo sepamos, helppodemos tener información rápida sobre ellos.
El comando helpsin parámetro del indicador nos da:

GNU bash, versión 4.1.2 (1) ...
Estos comandos de shell se definen internamente .
Escriba helppara ver esta lista. Escriba help namepara obtener más información sobre el nombre de la función .
Use info bashpara obtener más información sobre el shell en general.
Use man -k' orinfo 'para obtener más información sobre los comandos que no están en esta lista.

Mientras tanto help ., además de help sourceobtener la misma ayuda idéntica :

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.

"Lo obvio es lo que nunca se ve hasta que alguien lo expresa simplemente". K.Gibran

Hastur
fuente
1

Este punto "." significa leer y ejecutar comandos del argumento del nombre de archivo en el contexto actual del shell. Es equivalente a la fuente. Este estilo es de Bourne Shell, y consulte http://ss64.com/bash/source.html

usuario94000
fuente