Cuando inicia sesión en un shell de Linux, hereda un entorno de trabajo específico. Un entorno , en el contexto de un shell, significa que ya hay ciertas variables configuradas para usted, lo que garantiza que sus comandos funcionen según lo previsto. Por ejemplo, la variable de entorno PATH define dónde busca comandos su shell. Sin él, casi todo lo que intente hacer en Bash fallaría con un comando no encontrado error. Su entorno, aunque casi invisible para usted mientras realiza sus tareas diarias, es de vital importancia.
Hay muchas maneras de afectar su entorno de shell. Puede realizar modificaciones en los archivos de configuración, como ~/.bashrc
y ~/.profile
, puede ejecutar servicios al inicio y puede crear sus propios comandos personalizados o escribir sus propias funciones de Bash.
Agregar a su entorno con fuente
Bash (junto con algunos otros shells) tiene un comando integrado llamado source
. Y aquí es donde puede resultar confuso:source
realiza la misma función que el comando .
(sí, eso es solo un punto), y no la misma source
como el Tcl
comando (que puede aparecer en su pantalla si escribe man source
). La source
incorporada el comando no está en tu PATH
en absoluto, de hecho. Es un comando que viene incluido como parte de Bash, y para obtener más información al respecto, puede escribir help source
.
El .
El comando es compatible con POSIX. La source
El comando no está definido por POSIX pero es intercambiable con .
comando.
Más sobre Bash
- Hoja de trucos de Bash
- Una introducción a la programación con Bash
- Guía para administradores de sistemas sobre secuencias de comandos de Bash
- Últimos artículos de Bash
Según Bash help
, la source
El comando ejecuta un archivo en su shell actual. La cláusula "en su shell actual" es significativa, porque significa que no inicia un sub-shell; por lo tanto, lo que sea que ejecutes con source
sucede dentro y afecta su actual entorno.
Antes de explorar cómo source
puede afectar su entorno, pruebe source
en un archivo de prueba para asegurarse de que ejecuta el código como se esperaba. Primero, cree un script Bash simple y guárdelo como un archivo llamado hello.sh
:
#!/usr/bin/env bash
echo "hello world"
Usando source
, puede ejecutar este script incluso sin configurar el bit ejecutable:
$ source hello.sh
hello world
También puede usar el .
incorporado comando para los mismos resultados:
$ . hello.sh
hello world
La source
y .
los comandos ejecutan con éxito el contenido del archivo de prueba.
Establecer variables e importar funciones
Puedes usar source
para "importar" un archivo en su entorno de shell, tal como podría usar el include
palabra clave en C o C++ para hacer referencia a una biblioteca o import
palabra clave en Python para traer un módulo. Este es uno de los usos más comunes de source
, y es una inclusión predeterminada común en .bashrc
archivos a source
un archivo llamado .bash_aliases
para que cualquier alias personalizado que defina se importe a su entorno cuando inicie sesión.
Aquí hay un ejemplo de cómo importar una función Bash. Primero, cree una función en un archivo llamado myfunctions
. Esto imprime su dirección IP pública y su dirección IP local:
function myip() {
curl http://icanhazip.com
ip addr | grep inet$IP | \
cut -d"/" -f 1 | \
grep -v 127\.0 | \
grep -v \:\:1 | \
awk '{$1=$1};1'
}
Importa la función a tu shell:
$ source myfunctions
Prueba tu nueva función:
$ myip
93.184.216.34
inet 192.168.0.23
inet6 fbd4:e85f:49c:2121:ce12:ef79:0e77:59d1
inet 10.8.42.38
Buscar fuente
Cuando usas source
en Bash, busca en su directorio actual el archivo al que hace referencia. Esto no sucede en todos los shells, así que revise su documentación si no está usando Bash.
Si Bash no puede encontrar el archivo para ejecutar, busca su PATH
en cambio. Nuevamente, este no es el valor predeterminado para todos los shells, así que revise su documentación si no está usando Bash.
Ambas son buenas características de conveniencia en Bash. Este comportamiento es sorprendentemente poderoso porque le permite almacenar funciones comunes en una ubicación centralizada en su disco y luego tratar su entorno como un entorno de desarrollo integrado (IDE). No tiene que preocuparse por dónde se almacenan sus funciones, porque sabe que están en su equivalente local de /usr/include
, por lo que no importa dónde se encuentre cuando los obtiene, Bash los encuentra.
Por ejemplo, podría crear un directorio llamado ~/.local/include
como un área de almacenamiento para funciones comunes y luego coloque este bloque de código en su .bashrc
archivo:
for i in $HOME/.local/include/*;
do source $i
done
Esto "importa" cualquier archivo que contenga funciones personalizadas en ~/.local/include
en su entorno de shell.
Bash es el único shell que busca tanto en el directorio actual como en su PATH
cuando usas la source
o el .
comando.
Usando fuente para fuente abierta
Usando source
o .
ejecutar archivos puede ser una forma conveniente de afectar su entorno mientras mantiene sus modificaciones modulares. La próxima vez que esté pensando en copiar y pegar grandes bloques de código en su .bashrc
considere colocar funciones relacionadas o grupos de alias en archivos dedicados y luego use source
para ingerirlos.