Sinalizadores personalizados do Bash com aliases ou funções

0

O que eu quero é poder definir sinalizadores personalizados para comandos / aliases do bash. Por exemplo, eu tenho:

alias ll='ls -Alh'
alias la='ls -A'
alias l='ls -lh'

No entanto, desejo configurar um sinalizador personalizado, como -d, que também executará ls -d */ sempre que eu executar os comandos acima, assim ll -f , que listaria apenas os diretórios ocultos em uma lista detalhada.

    
por m147 10.08.2017 / 14:47

1 resposta

1

Não sei bem o que você quer com sua última frase, desculpe;)

Estou assumindo que você deseja que ll tenha a funcionalidade de ls -Alh exceto quando for chamado por ll -f - nesse caso, ele deve listar apenas os diretórios ocultos. Se não é isso que você estava procurando, deve ser relativamente fácil de ajustar. Basta adicionar todos os seus sinalizadores que tenham um significado especial ao comando getopts e, em seguida, escrever um caso para cada um desses sinalizadores. O caso padrão deve sempre ser break , de modo que, se você passar um sinalizador que não tenha um significado especial para sua função, então ls -Alh será executado.

Em qualquer caso, aqui está um script que você pode criar para definir uma função chamada ll (aliases não são poderosos para fazer o que você quer). Você deve source , ou seja, source <script> do script, para que a função seja definida. Tenha cuidado para fazer unalias ll antes de pesquisar o script ou coisas inesperadas podem acontecer.

#!/usr/bin/env bash
ll() {
    while getopts ":f" opt; do
        case $opt in
            f)
                command ls -Ald .*/
                return 0
                ;;
            \?)
                break;
        esac
    done
    command ls -Alh "$@"
}

Isso fará com que ll -f se comporte como ls -Ald .*/ , que lista todos os diretórios ocultos. Se você der a ll um sinalizador que seja não -f , o padrão será chamar ls -Alh "$@" ( $@ simplesmente significa "todos os argumentos"). Por exemplo, se você escrever ll -d Desktop , ls -Alhd Desktop será executado. Se nenhum sinalizador for passado para ll , ele apenas executará ls -Alh "$@" .

    
por 10.08.2017 / 16:57