Estou tentando criar um alias no bash. O que eu quero fazer é mapear ls -la
parals -la | more
No meu arquivo .bashrc, foi isso que tentei:
alias 'ls -la'='ls -la | more'
No entanto, ele não funciona porque (presumo) ele possui espaços no nome alternativo. Existe uma solução alternativa para isso?
alias lsm='ls -la | more'
Respostas:
A documentação do Bash indica "Para quase todos os fins, as funções do shell são preferidas aos aliases". Aqui está uma função shell que substitui
ls
e faz com que a saída seja canalizadamore
se o argumento consistir em (somente)-la
.Como uma linha:
Saída de tubo automaticamente:
fonte
command
impede que a função seja chamada recursivamente.Na página de manual do alias :
Portanto, apenas a primeira palavra é verificada quanto a correspondências de alias, o que torna impossível os alias de várias palavras. Você pode escrever um script de shell que verifique os argumentos e chame o seu comando se eles corresponderem e apenas chamar o normal
ls
(consulte a resposta de @Dennis Williamson )fonte
Uma abordagem ligeiramente aprimorada, extraída da resposta de Dennis:
Ou o one-liner:
Isso permite que mais opções / argumentos sejam anexados após o comando, se necessário, por exemplo
ls -la -h
fonte
ls -lat
ser excluído deste tratamento? Eu precisaria colocar um caso para lidar com isso acima da-la*
entrada, sim?Você ainda pode chamar esse alias, mas precisa de cotação para que o espaço faça parte da palavra de comando. Então
"ls -la" -p pattern
vai passar a-p pattern
opção paramore
, nãols
.fonte