Alias para listar o consumo máximo de arquivos e diretórios - o caminho mais curto?

0
function isaix { echo "alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'" >> ~/.kshrc; }
function islinux { echo "alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'" >> ~/.bash_profile; }
OSTYPE="'uname'"; if echo "${OSTYPE}" | grep -iq aix; then isaix; fi; if echo "${OSTYPE}" | grep -iq linux; then islinux; fi

As linhas anteriores criam um alias "d" que lista os 20 principais arquivos e diretórios por tamanho.

Pergunta : Como tornar essas linhas longas mais curtas? (A detecção do tipo de sistema operacional ou qualquer outra parte)

    
por LoukiosValentine79 05.02.2016 / 07:11

4 respostas

1

OSTYPE="'uname'"
OSTYPE="${OSTYPE,,}"
case "$OSTYPE" in
    *aix*)
        target=~/.kshrc
    ;;
    *linux*)
        target=~/.bash_profile
    ;;
esac
if [ -n "$target" ]; then
    echo "alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'" >> "$target"
fi
    
por 05.02.2016 / 07:32
1

Use a expansão de comando do shell $(...) para alternar o nome do arquivo de saída.

Este código verifica apenas o aix. O comportamento padrão atualiza o .bashrc .

echo "alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'" >> $( case $(uname) in *[aA][iI][xX]*) echo ~/.kshrc;; *) echo ~/.bashrc;; esac )

Ou divida linhas para facilitar a leitura:

rcfile=$( case $(uname) in *[aA][iI][xX]*) echo ~/.kshrc;; *) echo ~/.bashrc;; esac )
echo "alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'" >> $rcfile
    
por 05.02.2016 / 07:45
0

Uma versão mais compacta (válida em ksh e bash) é:

typeset -l ostype
ostype="$(uname)";
cmd="alias d='du -sm -- * 2>/dev/null |sort -nr |head -n 20'"

case "$ostype" in
    *aix*)     echo "$cmd" >> ~/.kshrc; ;;
    *linux*)   echo "$cmd" >> ~/.bash_profile; ;;
esac
    
por 06.02.2016 / 03:16
0

Uma resposta ainda mais curta, mas um pouco mais enigmática (funciona no bash e no ksh):

typeset -l ostype; ostype="$(uname)"
cmd="alias d='du -sm -- * 2>/dev/null | sort -nr | head -20'"

case $ostype in
    *linux*) a=ba;;
    *aix*)   a=k;;
esac
a="${a:+~/".${a}shrc"}"
${a:+false} || echo "$cmd" >> "$a"
    
por 07.02.2016 / 03:03

Tags