Como passar parâmetros para um alias?

52

Para o script bash, posso usar "$@" para acessar argumentos. Qual é o equivalente quando eu uso um alias?

    
por prosseek 04.11.2010 / 22:44

5 respostas

42

Aliases são como comandos em que todos os argumentos para eles são passados como argumentos para o programa que eles alias. Por exemplo, se você tivesse alias de ls to ls -la , então digitar ls foo bar seria realmente executar ls -la foo bar na linha de comando.

Se você quer ter controle real sobre como os argumentos são interpretados, então você poderia escrever uma função assim:

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

    shift 2               # get rid of the first two arguments

    # ...

    /path/to/my_program "$@"
}
    
por 04.11.2010 / 23:53
18

Somando-se às respostas atuais, uma coisa importante a ser realizada sobre como os aliases funcionam é que todos os parâmetros que você digitar após um comando com alias serão usados literalmente no final. Portanto, não há como usar alias para dois comandos (canalizado ou não), dos quais o primeiro deve interpretar os parâmetros. Para deixar claro, aqui está um exemplo de algo que não funcionaria como esperado:

alias lsswp="ls -l | grep swp"

(um exemplo inspirado por esta questão ) sempre usará a saída de ls -l realizada no diretório atual e faça um grep nisso - então usando

lsswp / tmp /

seria equivalente a ls -l | grep swp /tmp/ e não ls -l /tmp/ | grep swp .

Para todos os propósitos em que os argumentos devem ser usados em algum lugar no meio, é necessário usar um function em vez de alias .

    
por 02.09.2011 / 14:04
14

Você não precisa fazer nada, na verdade; aliases fazem isso automaticamente. Por exemplo:

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

Você verá a primeira página do foo.txt, e o less será encerrado no EOF (-e), as buscas serão insensíveis ao caso (-i), etc.

    
por 04.11.2010 / 22:50
10

Solução de alias

Se você realmente for contra o uso de uma função em si, poderá usar:

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

Você pode substituir $@ por $1 se desejar apenas o primeiro argumento.

Explicação

Isso cria uma função temporária f , que é passada aos argumentos.

Argumentos de alias são passados apenas no final. Observe que f é chamado no final do alias.

O unset -f remove a definição da função, pois o alias é executado para que não seja exibido posteriormente.

    
por 23.05.2017 / 05:17
1

Estou respondendo por csh:

Sim, você pode usar os parâmetros em aliases e - como uma diferença para o que foi dito acima - você pode se referir a eles em qualquer lugar na definição de alias - não apenas no final.

Exemplo para tar-gz -ing alguma coisa:

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

, onde !:1 e !:2 são os parâmetros que você fornecerá ao chamar seu alias.

Exemplo de uso:

    $ 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

O que efetivamente significa que você usou dois parâmetros que você inseriu em locais arbitrários do comando tar, fazendo de tudo isso um alias tgz

    
por 18.07.2018 / 16:41