< Bash (Español)

Bash (Español)/Functions (Español)

Bash también admite funciones. Añada las funciones a ~/.bashrc, o a un archivo separado que sea cargado desde ~/.bashrc. Se pueden encontrar más ejemplos de la función Bash en BBS#30155.

Esta traducción de Bash/Functions fue revisada el 2020-12-08. Si existen cambios puede actualizarla o avisar al equipo de traducción.

Mostrar códigos de error

Para configurar trap para interceptar un código de retorno distinto de cero de la última ejecución del programa:

EC() {
	echo -e '\e[1;33m'code $?'\e[m\n'
}
trap EC ERR

Compilar y ejecutar una código fuente en C sobre la marcha

La siguiente función compilará (dentro del directorio /tmp/) y ejecutará el código fuente en C del argumento sobre la marcha (y la ejecución será sin argumentos). Y finalmente, después de que el programa termine, eliminará el archivo compilado.

# Compilar y ejecutar un código fuente en C sobre la marcha
csource() {
	[[ $1 ]]    || { echo "Falta el operando" >&2; return 1; }
	[[ -r $1 ]] || { printf "El archivo %s no existe o no se puede leer\n" "$1" >&2; return 1; }
	local output_path=${TMPDIR:-/tmp}/${1##*/};
	gcc "$1" -o "$output_path" && "$output_path";
	rm "$output_path";
	return 0;
}

Extraer

La siguiente función extraerá una amplia gama de tipos de archivos comprimidos. Utilícelo con la sintaxis extract <archivo1> <archivo2> ....

extract() {
    local c e i

    (($#)) || return

    for i; do
        c=''
        e=1

        if [[ ! -r $i ]]; then
            echo "$0: el archivo es ilegible: \`$i'" >&2
            continue
        fi

        case $i in
            *.t@(gz|lz|xz|b@(2|z?(2))|a@(z|r?(.@(Z|bz?(2)|gz|lzma|xz)))))
                   c=(bsdtar xvf);;
            *.7z)  c=(7z x);;
            *.Z)   c=(uncompress);;
            *.bz2) c=(bunzip2);;
            *.exe) c=(cabextract);;
            *.gz)  c=(gunzip);;
            *.rar) c=(unrar x);;
            *.xz)  c=(unxz);;
            *.zip) c=(unzip);;
            *.zst) c=(unzstd);;
            *)     echo "$0: extensión de archivo no reconocida: \`$i'" >&2
                   continue;;
        esac

        command "${c[@]}" "$i"
        ((e = e || $?))
    done
    return "$e"
}
Nota: Asegúrese de que extglob esté activado: shopt -s extglob, añadiéndolo a ~/.bashrc (véase Opciones que cambian el comportamiento de englobado).

Otra forma de hacer esto es instalar un paquete especializado, véase Herramientas convenientes de archivado y compresión.

cd y ls en uno

Muy a menudo, al cambiar a un directorio le sigue la orden ls para listar su contenido. Por lo tanto, es útil tener una segunda función que haga ambas cosas a la vez. En este ejemplo lo llamaremos cl (change list, o listar al cambiar) y mostraremos un mensaje de error si el directorio especificado no existe.

Por supuesto, la orden ls puede modificarse para adaptarse a sus necesidades, por ejemplo, ls -hall --color=auto.

Utilidad de tarea simple

Inspirado en #Tomador de notas simple.

Calculadora

calc() {
    echo "scale=3;$@" | bc -l
}

Kingbash

Kingbash - autocompletado dirigido por menú (véase BBS#101010).

Instale de AUR, luego inserte lo siguiente en su ~/.bashrc:

function kingbash.fn() {
    echo -n "KingBash> $READLINE_LINE" #Where "KingBash> " se ve mejor si se parece a su PS1, al menos en longitud.
    OUTPUT=$(/usr/bin/kingbash "$(compgen -ab -A function)")
    READLINE_POINT=$(echo "$OUTPUT" | tail -n 1)
    READLINE_LINE=$(echo "$OUTPUT" | head -n -1)
    echo -ne "\r\e[2K"
}
bind -x '"\t":kingbash.fn'

Información IP

Información detallada sobre una dirección IP o nombre de máquina (hostname) en bash a través de https://ipinfo.io:

ipif() { 
    if grep -P "(([1-9]\d{0,2})\.){3}(?2)" <<< "$1"; then
	 curl ipinfo.io/"$1"
    else
	ipawk=($(host "$1" | awk '/address/ { print $NF }'))
	curl ipinfo.io/${ipawk[1]}
    fi
    echo
}
gollark: We have reached a reasonable concordance.
gollark: Just agree to the election terms.
gollark: Also we need gibson/umnikos cooperation.
gollark: Gibson, if you DELIBERATELY stop this going through when it PROBABLY COULD that would be BAD SIMILARLY TO the vote scattering thing.
gollark: PLEASE JUST ACCEPT IT so we can get umnikos to transfer.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.