aliasing um script um pouco complexo no Linux / bash

1

O Stormvirux forneceu este belo script em outro tópico. Ele coloca títulos de colunas na saída de uma listagem ls -l :

#!/bin/bash
{ echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename; ls -l ; } | column -t | awk 'NR!~/^(2)$/'
ls -l | head -1

Apenas executá-lo na linha de comando funciona muito bem. Eu gosto e quero usá-lo como um alias para, digamos lsl em um sistema Linux rodando bash.

Mas eu não posso, para a vida de mim, descobrir como fazer os delimitadores funcionarem, então isso é interpretado corretamente. Quando tento apenas usar o comando alias na linha de comando (o que faço antes de submetê-lo a um arquivo de configuração como .bashrc ), ele não funciona. Eu recebo vários erros quando tento várias maneiras de empacotá-lo para que ele seja interpretado corretamente.

Alguém pode me dizer como fazer isso funcionar como um alias ou me indicar uma boa referência que possa me dizer claramente o que preciso fazer para que algo assim funcione como um alias?

    
por garyZ 21.08.2014 / 06:11

2 respostas

3

Outra maneira, você pode defini-lo como uma função em seu .bashrc :

lsl() {
  { echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename;
  ls -l; } | 
  column -t | 
  awk 'NR!~/^(2)$/'
  ls -l | head -1
}
    
por 21.08.2014 / 06:28
2

Se você precisar fazer isso como um alias:

alias lsl='{ echo Permissions links Owner Group Size Last_modMonth Last_modTime Last_modTime Filename; ls -l ; } | column -t | awk '\''NR!~/^(2)$/'\'';ls -l | head -1'

Precisamos escapar das aspas simples internas com barras invertidas para que não sejam interpretadas como interrompendo a string.

Se usarmos aspas duplas, o ! será interpretado como uma expansão de histórico e precisa ainda mais escapar, o que é provavelmente o problema mais confuso que você acabou com (algo como " bash: !~/^: event not found ", que é um jargão incompreensível).

O acima funcionará, mas seria melhor colocar esse arquivo em algum lugar do caminho e torná-lo executável. Crie, digamos, ~/.local/bin e um script lsl com exatamente o conteúdo de sua postagem lá dentro, depois chmod +x ~/.local/bin/lsl e adicione uma linha ao seu .bashrc :

export PATH="$HOME/.local/bin:$PATH"

para garantir que os executáveis nesse diretório sejam encontrados. Então você pode simplesmente escrever lsl em qualquer lugar para executar o código. Essa abordagem é mais sustentável e mais fácil de entender.

    
por 21.08.2014 / 06:24

Tags