< 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: Presumably, they think it's *better* and they can make people more equal by focusing on what they see as inequality in it somehow.
gollark: Redraw the states using Voroni tessellation to reduce gerrymandering.
gollark: I think schools should definitely have less of the conformity stuff, more choice of subject etc., and actual acknowledgement of the existence of computers.
gollark: Oh, uniforms are bad, why even *have* those (except to produce conformity, which is an unstated goal of lots of schooling I think)?
gollark: But it forces you to do lots of things even when you don't particularly like them and are uninterested in continuing them.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.