Hacer un alias de Bash con los parámetros?

Esta traducción de: Make Alias Un Bash el parámetro que tiene una?

Se utiliza para utilizar el cShell I ( ), que le permite al crear un alias Takes A que el parámetro. Solía usar cShell ( ), que le permite crear un alias con un parámetro. La notación era algo así como la marca un poco como

alias junk="mv \\!* ~/.Trash"

En Bash, esto no parece trabajo. En Bash, que parece tener ningún efecto. Teniendo en cuenta que Bash tiene una multitud de útiles características, quiero suponer que éste se ha implementado, pero me pregunto cómo. En vista de la Bash tiene muchas funciones útiles, me gustaría asumir que la función se ha logrado, pero quiero saber cómo lograr.


# 1 planta

Referencia: Bash alias https://stackoom.com/question/TvGw/ do con un parámetro


Casa # 2

El perfeccionamiento de la respuesta anterior, se puede obtener la sintaxis 1-línea como sea posible para los alias, que es más conveniente para definiciones ad-hoc en una concha o .bashrc archivos: refinamiento de las respuestas anteriores, se puede obtener el mismo alias como la sintaxis de primera línea, esto es más conveniente para la cáscara o hoc definiciones archivo ad .bashrc:

bash$ myfunction() { mv "$1" "$1.bak" && cp -i "$2" "$1"; }

bash$ myfunction original.conf my.conf

No olvide el punto y coma antes del cierre derecha del soporte. No se olvide el punto y coma antes del paréntesis de cierre. Del mismo modo, para la pregunta real: Una vez más, por los problemas prácticos:

csh% alias junk="mv \\!* ~/.Trash"

bash$ junk() { mv "$@" ~/.Trash/; }

O: O bien:

bash$ junk() { for item in "$@" ; do echo "Trashing: $item" ; mv "$item" ~/.Trash/; done; }

Casa # 3

Tres ejemplos de aquí son apos Funciones de fondo en la que tengo que Mi ~/.bashrc, que son esencialmente los alias que aceptan parámetros A: Este es mi ~/.bashrctres ejemplos tienen funciones, que en esencia es un alias aceptado parámetros:

#Utility required by all below functions.
#https://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-bash-variable#comment21953456_3232433
alias trim="sed -e 's/^[[:space:]]*//g' -e 's/[[:space:]]*\$//g'"

. .

:<<COMMENT
    Alias function for recursive deletion, with are-you-sure prompt.

    Example:
        srf /home/myusername/django_files/rest_tutorial/rest_venv/

    Parameter is required, and must be at least one non-whitespace character.

    Short description: Stored in SRF_DESC

    With the following setting, this is *not* added to the history:
        export HISTIGNORE="*rm -r*:srf *"
    - https://superuser.com/questions/232885/can-you-share-wisdom-on-using-histignore-in-bash

    See:
    - y/n prompt: https://stackoverflow.com/a/3232082/2736496
    - Alias w/param: https://stackoverflow.com/a/7131683/2736496
COMMENT
#SRF_DESC: For "aliaf" command (with an 'f'). Must end with a newline.
SRF_DESC="srf [path]: Recursive deletion, with y/n prompt\n"
srf()  {
    #Exit if no parameter is provided (if it's the empty string)
        param=$(echo "$1" | trim)
        echo "$param"
        if [ -z "$param" ]  #http://tldp.org/LDP/abs/html/comparison-ops.html
        then
          echo "Required parameter missing. Cancelled"; return
        fi

    #Actual line-breaks required in order to expand the variable.
    #- https://stackoverflow.com/a/4296147/2736496
    read -r -p "About to
    sudo rm -rf \"$param\"
Are you sure? [y/N] " response
    response=${response,,}    # tolower
    if [[ $response =~ ^(yes|y)$ ]]
    then
        sudo rm -rf "$param"
    else
        echo "Cancelled."
    fi
}

. .

:<<COMMENT
    Delete item from history based on its line number. No prompt.

    Short description: Stored in HX_DESC

    Examples
        hx 112
        hx 3

    See:
    - https://unix.stackexchange.com/questions/57924/how-to-delete-commands-in-history-matching-a-given-string
COMMENT
#HX_DESC: For "aliaf" command (with an 'f'). Must end with a newline.
HX_DESC="hx [linenum]: Delete history item at line number\n"
hx()  {
    history -d "$1"
}

. .

:<<COMMENT
    Deletes all lines from the history that match a search string, with a
    prompt. The history file is then reloaded into memory.

    Short description: Stored in HXF_DESC

    Examples
        hxf "rm -rf"
        hxf ^source

    Parameter is required, and must be at least one non-whitespace character.

    With the following setting, this is *not* added to the history:
        export HISTIGNORE="*hxf *"
    - https://superuser.com/questions/232885/can-you-share-wisdom-on-using-histignore-in-bash

    See:
    - https://unix.stackexchange.com/questions/57924/how-to-delete-commands-in-history-matching-a-given-string
COMMENT
#HXF_DESC: For "aliaf" command (with an 'f'). Must end with a newline.
HXF_DESC="hxf [searchterm]: Delete all history items matching search term, with y/n prompt\n"
hxf()  {
    #Exit if no parameter is provided (if it's the empty string)
        param=$(echo "$1" | trim)
        echo "$param"
        if [ -z "$param" ]  #http://tldp.org/LDP/abs/html/comparison-ops.html
        then
          echo "Required parameter missing. Cancelled"; return
        fi

    read -r -p "About to delete all items from history that match \"$param\". Are you sure? [y/N] " response
    response=${response,,}    # tolower
    if [[ $response =~ ^(yes|y)$ ]]
    then
        #Delete all matched items from the file, and duplicate it to a temp
        #location.
        grep -v "$param" "$HISTFILE" > /tmp/history

        #Clear all items in the current sessions history (in memory). This
        #empties out $HISTFILE.
        history -c

        #Overwrite the actual history file with the temp one.
        mv /tmp/history "$HISTFILE"

        #Now reload it.
        history -r "$HISTFILE"     #Alternative: exec bash
    else
        echo "Cancelled."
    fi
}

Las Referencias: Referencias:


# 4 piso

Nota: En caso de que la idea no es obvio, es una mala idea utilizar alias para cualquier cosa, pero los alias, la primera es la 'función de un alias' y la segunda es la 'difícil de leer redirección / fuente'. nota: Si esta idea no es obvio, es otro uso que el alias de un alias es una mala idea nada, la primera es la "función de alias" y el segundo es "redirigir difícil de leer / código fuente." Además, hay defectos, (que por el pensamiento sería obvio, pero el en caso de que se confunden: el no me refiero a ellos en realidad servir ... En cualquier lugar) Además, hay un defecto (Wo Renwei esto es obvio, pero por si acaso usted está confundido :! no estoy diciendo que en realidad puede ser utilizado en cualquier lugar)

.................................................. .................................................. ............................................ ...... ............................................. ..... .............................................. .... .................................................

Yo he respondido a esto antes, y siempre ha sido así en el pasado: Ya he respondido, en el pasado siempre ha sido así:

alias foo='__foo() { unset -f $0; echo "arg1 for foo=$1"; }; __foo()'

Lo que está bien y bueno, a menos que usted está evitando el uso de las funciones de todos juntos. A menos que evite el uso de la función, de lo contrario, es una práctica buena. en cuyo caso se puede aprovechar la gran capacidad de bash para redirect: En este caso, se puede aprovechar la potente función de redirección fiesta de texto:

alias bar='cat <<< '\''echo arg1 for bar=$1'\'' | source /dev/stdin'

Ambos son aproximadamente la misma longitud dar o tomar unos pocos caracteres. Son sustancialmente la misma longitud, que es ser insertados o varios caracteres.

De La real kicker es -Diferencia ese momento, el superior que es la 'función del método' y The El ser inferior 'la redirección-Source' Método. Clave de las propiedades es la diferencia de tiempo, la parte superior es "funciones de método", la parte inferior es "redirigir Fuente" método. Para probar esta teoría, la temporización de habla por sí mismo: Para probar esta teoría, el tiempo es evidente:

arg1 for foo=FOOVALUE
 real 0m0.011s user 0m0.004s sys 0m0.008s  # <--time spent in foo
 real 0m0.000s user 0m0.000s sys 0m0.000s  # <--time spent in bar
arg1 for bar=BARVALUE
ubuntu@localhost /usr/bin# time foo FOOVALUE; time bar BARVALUE
arg1 for foo=FOOVALUE
 real 0m0.010s user 0m0.004s sys 0m0.004s
 real 0m0.000s user 0m0.000s sys 0m0.000s
arg1 for bar=BARVALUE
ubuntu@localhost /usr/bin# time foo FOOVALUE; time bar BARVALUE
arg1 for foo=FOOVALUE
 real 0m0.011s user 0m0.000s sys 0m0.012s
 real 0m0.000s user 0m0.000s sys 0m0.000s
arg1 for bar=BARVALUE
ubuntu@localhost /usr/bin# time foo FOOVALUE; time bar BARVALUE
arg1 for foo=FOOVALUE
 real 0m0.012s user 0m0.004s sys 0m0.004s
 real 0m0.000s user 0m0.000s sys 0m0.000s
arg1 for bar=BARVALUE
ubuntu@localhost /usr/bin# time foo FOOVALUE; time bar BARVALUE
arg1 for foo=FOOVALUE
 real 0m0.010s user 0m0.008s sys 0m0.004s
 real 0m0.000s user 0m0.000s sys 0m0.000s
arg1 for bar=BARVALUE

Esta es la parte inferior de unos 200 resultados, hecho a intervalos aleatorios. Se trata de la parte inferior 200 de los resultados, realizado a intervalos aleatorios. Parece que la creación de la función / destrucción toma más tiempo que la redirección. Función para crear / destruya parecen pasar más tiempo que la reorientación. Esperamos que esto ayudará futuros visitantes a esta pregunta (que no quería mantener para mí). Espero que esto ayuda a los futuros visitantes para resolver este problema (que no quiere responder a esta pregunta).


Casa # 5

Solución alternativa al uso ES UNA marcador , una herramienta recientemente creado registros en que la he android.permission que "marcador" y las plantillas de comandos fácilmente Coloque el cursor Coloque el comando AT-titulares: Una solución alternativa es el uso de marcadores herramienta, que he creado recientemente que permite a la plantilla de comando "marcador" y colocar fácilmente el cursor en los marcadores de posición de comando en:

la línea de órdenes

Me encontré con que la mayor parte del tiempo, me 'm usando funciones de shell, así que no tienen que escribir los comandos más utilizados una y otra vez en la línea de comandos. Me pareció que la mayoría de las veces, he estado usando funciones de shell, no es necesario con el fin alinear una y otra vez para escribir comandos de uso frecuente. El tema del uso de funciones para este uso caso, es la adición de nuevos términos a mi vocabulario de mando y tener que recordar qué parámetros se refieren a funciones en el mando real. Problema al utilizar la función en este caso de uso es agregar en mi vocabulario de comandos los nuevos términos, y deben recordar lo que el comando real de los parámetros de la función del dedo medio. Marcador objetivo es eliminar esa carga mental . objetivo es eliminar las señales de que la carga mental.


Casa # 6

Si usted está buscando una manera genérica para aplicar todos los parametros a una función, no sólo uno o dos, o alguna otra cantidad codificado, que puede hacer que de esta manera: si usted está buscando un todos los parámetros a una función común el método, en lugar de sólo uno o dos de codificación fija, o alguna otra cantidad, pueden conseguirse por:

#!/usr/bin/env bash

# you would want to `source` this file, maybe in your .bash_profile?
function runjar_fn(){
    java -jar myjar.jar "$@";
}

alias runjar=runjar_fn;

Ejemplo anterior en al El SO, i Pass todos los parámetros de la Cuando funciono runjara en el alias. Así, en el ejemplo anterior, I va a correr runjartodos los parámetros pasados al alias.

Ejemplo Para el, si lo hacía runjar hi thereacabaría funcionando realmente java -jar myjar.jar hi there. Por ejemplo, si me runjar hi therequedo runjar hi there, con el tiempo actualmente en funcionamiento java -jar myjar.jar hi there. Me ha hecho si runjar one two threese correría java -jar myjar.jar one two three. Si yo runjar one two threeentonces a correr java -jar myjar.jar one two three.

Al igual que el este de la I $@-. Debido a base de TI solución funciona con cualquiera de Número El params me gusta este basada $@solución, ya que puede ser utilizado para cualquier número de parámetros.

Artículos originales publicados 0 · ganado elogios 73 · vistas 550 000 +

Supongo que te gusta

Origin blog.csdn.net/w36680130/article/details/105269593
Recomendado
Clasificación