O comando linux du na função shell produz apenas uma linha de saída

O comando linux du na função shell produz apenas uma linha de saída

Tenho usado duo comando para mostrar o uso do arquivo:

$ sudo du -hsx /* | sort -rh | head -n 40
16G     /home
5.3G    /var
2.6G    /usr
840M    /run
...

E quero escrever uma função para me salvar do trabalho repetitivo:

show_disk() {
    sudo du -hsx "$1" | sort -rh | head -n 40
}

Mas quando executo esta função, duapenas uma linha de saída é mostrada como:

$ show_disk() /*
0   /bin

Parece-me que o ducomando se comporta de maneira diferente em uma função shell, onde foi que errei com isso? Qualquer ajuda seria apreciada.

Responder1

$1é o primeiro argumento. Lembre-se de que é o shell que expande os curingas, não o aplicativo, portanto, *não é um único argumento, a menos que corresponda a apenas um (ou nenhum) arquivo/diretório.

Você deve usar aspas duplas "$@"em seu script se quiser aceitar todos os argumentos. (Não use, $*pois isso interromperá nomes de arquivos contendo espaços.)

informação relacionada