Een Bash alias maken die een parameter neemt?

Vroeger gebruikte ik CShell ([tag:csh]), waarmee je een alias kunt maken die een parameter neemt. De notatie was zoiets als

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

In Bash lijkt dit niet te werken. Gezien het feit dat Bash een veelheid aan nuttige functies heeft, zou ik aannemen dat deze is geïmplementeerd, maar ik vraag me af hoe.

Oplossing

Bash alias accepteert niet direct parameters. U zult een functie moeten maken.

alias accepteert geen parameters, maar een functie kan net als een alias worden aangeroepen. Bijvoorbeeld:

myfunction() {
    #do things with parameters like $1 such as
    mv "$1" "$1.bak"
    cp "$2" "$1"
}

myfunction old.conf new.conf #calls `myfunction`

Overigens, Bash functies gedefinieerd in uw .bashrc en andere bestanden zijn beschikbaar als commando's binnen uw shell. Dus je kunt bijvoorbeeld de vorige functie als volgt aanroepen

$ myfunction original.conf my.conf
Commentaren (19)

Als je het antwoord hierboven verfijnt, kun je 1-regelige syntaxis krijgen zoals je kunt voor aliassen, wat handiger is voor ad-hoc definities in een shell of .bashrc bestanden:

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

bash$ myfunction original.conf my.conf

Vergeet de puntkomma niet voor het rechter haakje. Evenzo, voor de eigenlijke vraag:

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

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

Of:

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

Hier's zijn drie voorbeelden van functies die ik in mijn ~/.bashrc heb, die in essentie aliassen zijn die een parameter accepteren:

#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'"

.


:
Commentaren (6)