1821 votes

Créer un alias Bash qui prend un paramètre ?

J'avais l'habitude d'utiliser CShell ( csh ), qui vous permet de créer un alias qui prend un paramètre. La notation était quelque chose comme

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

Dans Bash, cela ne semble pas fonctionner. Étant donné que Bash possède une multitude de fonctionnalités utiles, je suppose que celle-ci a été implémentée, mais je me demande comment.

3 votes

3 votes

Assurez-vous que vous utilisez des guillemets autour des args "$1"

1 votes

Cette question est hors sujet pour l'OS. Elle a été répondu sur UNIX.SE et la réponse est que vous n'avez même pas besoin de vous en soucier : "Par exemple, si vous deviez aliaser ls a ls -la puis en tapant ls foo bar serait vraiment exécuter ls -la foo bar sur la ligne de commande".

55voto

Ivan Points 3650

Une fois, je me suis amusé projet et je l'utilise toujours. Il montre une certaine animation lorsque je copie des fichiers par l'intermédiaire de cp commandement coz cp ne montrent rien et c'est un peu frustrant. J'ai donc créé cet alias

alias cp="~/SCR/spiner cp"

Et voici le spiner script.

#!/bin/bash

#Set timer
T=$(date +%s)

#Add some color
. ~/SCR/color

#Animation sprites
sprite=( "(* )  ( *)" " (* )( *) " " ( *)(* ) " "( *)  (* )" "(* )  ( *)" )

#Print empty line and hide cursor
printf "\n${COF}"

#Exit function
function bye { printf "${CON}"; [ -e /proc/$pid ] && kill -9 $pid; exit; }; trap bye INT

#Run our command and get its pid
"$@" & pid=$!

#Waiting animation
i=0; while [ -e /proc/$pid ]; do sleep 0.1

    printf "\r${GRN}Please wait... ${YLW}${sprite[$i]}${DEF}"
    ((i++)); [[ $i = ${#sprite[@]} ]] && i=0

done

#Print time and exit
T=$(($(date +%s)-$T))
printf "\n\nTime taken: $(date -u -d @${T} +'%T')\n"

bye

C'est comme ça

enter image description here

Animation cyclique)

enter image description here

Voici le lien vers un couleur script mentionné ci-dessus. Et nouveau cycle d'animation)

enter image description here

43voto

Amine Hajyoussef Points 3004

Une solution alternative consiste à utiliser marqueur J'ai récemment créé un outil qui vous permet de mettre en signet des modèles de commande et de placer facilement le curseur aux emplacements de commande :

commandline marker

J'ai constaté que la plupart du temps, j'utilise les fonctions de l'interpréteur de commandes afin de ne pas avoir à écrire encore et encore les commandes fréquemment utilisées dans la ligne de commande. Le problème de l'utilisation des fonctions dans ce cas est d'ajouter de nouveaux termes à mon vocabulaire de commande et de devoir me rappeler à quelles fonctions les paramètres font référence dans la commande réelle. L'objectif de Marker est d'éliminer cette charge mentale.

24voto

Maxx Selva K Points 79

Syntaxe :

alias shortName="your custom command here"

Exemple :

alias tlogs='_t_logs() { tail -f ../path/$1/to/project/logs.txt ;}; _t_logs'

18voto

Billeh Points 902

L'alias Bash accepte absolument les paramètres. Je viens d'ajouter un alias pour créer une nouvelle application react qui accepte le nom de l'application comme paramètre. Voici mon processus :

Ouvrir le bash_profile pour l'éditer dans nano

nano /.bash_profile

Ajoutez vos alias, un par ligne :

alias gita='git add .'
alias gitc='git commit -m "$@"'
alias gitpom='git push origin master'
alias creact='npx create-react-app "$@"'

note : le "$@" accepte les paramètres passés comme "creact my-new-app".

Sauvegarder et quitter l'éditeur nano

ctrl+o pour écrire (appuyez sur entrée) ; ctrl+x pour sortir

Dites au terminal d'utiliser les nouveaux alias dans .bash_profile

source /.bash_profile

C'est fait ! Vous pouvez maintenant utiliser vos nouveaux alias

14voto

aliteralmind Points 6583

Voici trois exemples de fonctions que j'ai dans mes ~/.bashrc qui sont essentiellement les alias qui acceptent un paramètre :

#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
}

Références :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X