Bash: espaços no nome do alias

98

Estou tentando criar um alias no bash. O que eu quero fazer é mapear ls -la para ls -la | more

No meu arquivo .bashrc, tentei:

alias 'ls -la'='ls -la | more'

No entanto, não funciona porque (eu suponho) tem espaços no nome do alias. Existe um trabalho para isso?

    
por sixtyfootersdude 05.02.2010 / 23:35

4 respostas

104

A documentação do Bash indica "Para quase todos os efeitos, as funções do shell são preferidas aliases. " Aqui está uma função do shell que substitui ls e faz com que a saída seja canalizada para more se o argumento consistir em (apenas) -la .

ls() {
    if [[ $@ == "-la" ]]; then
        command ls -la | more
    else
        command ls "$@"
    fi
}

Como um verso:

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

Saída de canal automaticamente:

ls -la
    
por 06.02.2010 / 00:13
45

Na página do manual do alias :

The first word of each simple command, if unquoted, is checked to see if it has an alias. If so, that word is replaced by the text of the alias. The alias name and the replacement text may contain any valid shell input, including shell metacharacters, with the exception that the alias name may not contain '='.

Portanto, apenas a primeira palavra é verificada para correspondências de alias, o que torna os aliases de várias palavras impossíveis. Você pode ser capaz de escrever um script de shell que verifica os argumentos e chama seu comando se eles corresponderem e, caso contrário, apenas chamará o% normalls (Consulte @ resposta de Dennis Williamson )

    
por 05.02.2010 / 23:47
13

Uma abordagem ligeiramente melhorada da resposta de Dennis:

function ls() {
  case $* in
    -la* ) shift 1; command ls -la "$@" | more ;;
    * ) command ls "$@" ;;
  esac
}

Ou o one-liner:

function ls() { case $* in -la* ) shift 1; command ls -la "$@" | more ;; * ) command ls "$@" ;; esac }

Isso permite que mais opções / argumentos sejam acrescentados após o comando, se necessário, por exemplo ls -la -h

    
por 26.09.2012 / 14:42
-2

Você pode invocar esse alias ainda, mas precisa de cotação para que o espaço faça parte da palavra de comando. Portanto, "ls -la" -p pattern passará a opção -p pattern para more , não ls .

    
por 06.02.2010 / 00:34

Tags