it-swarm-eu.dev

Jak předat parametry aliasu?

Pro bash skript mohu použít "[email protected]" pro přístup k argumentům. Jaký je ekvivalent, když používám alias?

77
prosseek

Aliasy jsou jako příkazy v tom, že všechny argumenty k nim jsou předávány jako argumenty programu, který aliasují. Například, pokud jste měli alias ls to ls -la, poté zadejte ls foo bar by opravd provést ls -la foo bar na příkazovém řádku.

Pokud chcete mít skutečnou kontrolu nad tím, jak jsou argumenty interpretovány, můžete napsat takovou funkci:

my_program_wrapper() {
    local first_arg="$1" \
          second_arg="$2"

    shift 2               # get rid of the first two arguments

    # ...

    /path/to/my_program "[email protected]"
}
54
amphetamachine

Alias ​​řešení

Pokud jste opravdu proti použití funkce per se, můžete použít:

$ alias wrap_args='f(){ echo before "[email protected]" after;  unset -f f; }; f'
$ wrap_args x y z
before x y z after

Můžete nahradit [email protected] s $1 pokud chcete pouze první argument.

Vysvětlení

Tím se vytvoří dočasná funkce f, která je předána argumentům.

Argumenty aliasu se předávají pouze na konci. Všimněte si, že f se volá na samém konci aliasu.

The unset -f odebere definici funkce, protože je alias spuštěn, aby se poté nevěsil.

34
Tom Hale

Kromě současných odpovědí je důležité si uvědomit, jak fungují aliasy, a to, že všechny parametry zadané po příkazu s aliasy budou použity doslova na konci. Neexistuje tedy způsob, jak použít alias pro dva příkazy (piped or not), z nichž první by měl interpretovat parametry. Abychom to vyjasnili, zde je příklad něčeho, co by nefungovalo podle očekávání:

alias lsswp="ls -l | grep swp"

(příklad inspirovaný tato otázka ), bude vždy použit výstup ls -l provedeno v adresáři aktuální a udělejte na to grep - pomocí

lsswp/tmp /

by se rovnalo ls -l | grep swp /tmp/ a ne ls -l /tmp/ | grep swp.

Pro všechny účely, kde by argumenty měly být použity někde uprostřed, je třeba použít function místo alias.

19
rozcietrzewiacz

Vlastně nemusíte nic dělat; aliasy to dělají automaticky. Například:

$ alias less="less -eirqM"
$ less foo.txt

Uvidíte první stránku foo.txt a less bude ukončeno na EOF (-e), vyhledávání nebudou rozlišovat velká a malá písmena (-i) atd.).

15
Warren Young

Odpovídám za csh:

Ano, můžete použít parametry v aliasech a - na rozdíl od toho, co bylo řečeno výše - se na ně můžete odkázat kdekoli v definici aliasu - nejen na konci.

Příklad pro tar-gz -ing:

$ alias tgz "tar cvf - \!:1 | gzip -9 > \!:2.tar.gz"

, kde !:1 a !:2 jsou parametry, které zadáte při volání svého aliasu.

Příklad použití:

    $ ls
    clrcf.dat                             user_comment_2016.06.03_12:51:50.txt  user_comment_2016.06.03_12:54:48.txt
        TEST-wADM.tec                         user_comment_2016.06.03_12:52:04.txt  user_comment_2016.06.03_12:55:13.txt


    $ tgz user* out
    a user_comment_2016.06.03_12:51:50.txt 1K
a user_comment_2016.06.03_12:52:04.txt 1K
a user_comment_2016.06.03_12:54:48.txt 1K
a user_comment_2016.06.03_12:55:13.txt 1K

    $ ls out*
    out.tar.gz

Což efektivně znamená, že jste použili dva parametry, které jste vložili na libovolná místa příkazu tar, což z něj dělá alias tgz

1
stevica