GNU/Linux >> Tutoriales Linux >  >> Linux

Importe funciones y variables a Bash con el comando fuente

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.


Linux
  1. Dividir archivos en fragmentos con el comando de división incorporado

  2. ¿El comando "eval" en Bash?

  3. ¿Funciones en variables de Shell?

  4. Usando el historial de bash para obtener un comando anterior, cópielo y luego 'ejecútelo' pero con el comando comentado

  5. comando bash alias con comillas simples y dobles

Comando de fuente Bash

Comando de salida de Bash y códigos de salida

Los comandos alias y unalias explicados con ejemplos

Diferencia entre la definición de variables Bash con y sin exportación

¿Qué es el comando fuente en Linux y cómo funciona?

¿Cuál es la diferencia entre &> y >&en bash?