Substituição do histórico de alias do Bash semelhante a \! * no csh

3

A minha pergunta é muito semelhante à de esta publicação antiga .

Eu gostaria de fazer algo semelhante: coloque em um alias o (s) último (s) argumento (s) digitado (s) na linha de comando atual. Isso seria equivalente ao csh \!* , que pode ser usado em aliases.

De acordo com o post referenciado, parece que o problema é a expansão histórica do bash, e é por isso que o fc é usado. A ideia seria fazer com que a substituição funcionasse no meio de uma sequência de comandos, como alias cat='cat -n !!:* && echo ""' (como um exemplo simplificado, que não funciona devido ao problema de expansão).

No entanto, isso difere do post referenciado no sentido de que eu quero pegar apenas os argumentos além do primeiro comando (ou seja, no post, eles pegam a linha inteira, em vez da linha inteira, exceto o argumento zero-th , o comando em si).

Qual é a melhor maneira de fazer isso em um alias bash? (Nota: procurando manter isso como um alias, não procurando por um script ou função).

    
por bossNova 22.02.2012 / 23:10

1 resposta

2

É melhor evitar aliases para algo diferente de substituições simples de comando único. Para usar argumentos, vários comandos, etc., você pode definir uma função , acessando parameters da mesma forma que você faria em um script:

foo() {
    do_this
    do_that "$1"
}

cat() { command cat "$@" && echo ""; }

(Normalmente, as funções substituem os executáveis, portanto command cat é necessário se você quiser pular a função e executar diretamente o executável.)

    
por 22.02.2012 / 23:21