Execute dois comandos no mesmo argumento

2

Eu estava querendo talvez apelidar um comando de modo que o comando fosse executado como de costume, mas também fizesse alguma outra coisa no argumento antes de ser executado. Um exemplo pode ser:

alias ls="echo displaying contents of $@; ls $@"

Apenas uma hipotética, mas essencialmente eu estava querendo executar um comando (ls neste caso) e ter um conjunto de comandos estáticos para rodar nele antes que o padrão ls acontecesse.

Uma função como:

function ls() {
echo "printing $1"
ls $1
}

não parece ser apropriado, pois eu teria que lidar com opções / opções sendo usadas no comando em questão, ou seja, recriando o comando inteiro.

PS. Eu quero usar o comando original como ele é normalmente usado apenas adicionar funcionalidade a ele da maneira descrita acima usando algo como alias ou rc (ou seja, algo que eu possa anexar permanentemente)

    
por user1227038 12.09.2013 / 10:58

3 respostas

5

Você pode usar "$@" para passar todos os argumentos da função como estão para o comando real:

$ verbose_ls() { echo "running ls with args '$@'"; \ls "$@"; }
$ alias ls=verbose_ls
$ ls -l -a /
running ls with args '-l -a /'
...

Observe o backslash \ antes do ls na função. Isso impedirá que bash expandisse o ls alias, já que você deseja chamar o /bin/ls , não o alias definido recursivamente.

Se você realmente quiser acessar um determinado argumento na função enquanto ainda mantém a opção de passar arbitrariamente a opção muda para o comando real, você provavelmente não pode evitar a implementação de algum tipo de lógica de análise de argumentos na própria função.

    
por 12.09.2013 / 11:50
0

Não pode ser feito com um alias: link

    
por 12.09.2013 / 11:58
0

Você pode usar:

ls() {
     echo "printing ${1}"
     command ls "${1}"
}
    
por 12.09.2013 / 11:44