DEV Community

Cover image for Combinando o ls com o comando shuf ... "and more":
Sérgio Araújo
Sérgio Araújo

Posted on

4 3

Combinando o ls com o comando shuf ... "and more":

Introdução

English version

Alguns comandos não geram uma lista de arquivos ou de sua saída, embora lidem com listas geradas por outros comandos, o shuf (embaralhador) é um desses exemplos, se desejo pegar o nome de uma imagem aleatória no meu diretório de imagens eu faço:

ls -1A ~/img/backgrounds/* | shuf -n 1
Enter fullscreen mode Exit fullscreen mode

O comando acima pode ser usado para criar uma variável a ser usada em outro comando, no caso um comando que além de setar o seu papel de parede, baseado nas cores do wallpaper, vai configurar as cores do seu terminal.

sudo pip3 install pipx
pipx install pywal
Enter fullscreen mode Exit fullscreen mode

O comando pipx instala seus programas em um sandbox, evitando conflitos no namespace. Após instaldo o pywal você terá um comando wal, usando ele criei o seguinte script:

/home/sergio/.local/bin/wal -i "$(ls -1A ~/img/backgrounds/* | shuf -n 1)"
Enter fullscreen mode Exit fullscreen mode

Altere o caminho de acordo com o seu sistema e usuários, após isso abra um novo terminal e rode esse comando:

Atualização!

Assistindo vídeos sobre o pywal descobri que na verdade não é necessário usar o comando shuf ou qualquer outro para pegar uma imagem aleatória, apenas fornecendo o caminho da pasta dos papeis de parede o wal escolherá uma imagem aleatoriamente, contudo o conhecimento adquirido com o shuf fica, como dizem os norte americanos: "in the back burner", guardado, como por exemplo para escolhar uma música aleatória em um momento qualquer.

wal --preview
Enter fullscreen mode Exit fullscreen mode

Assim cada vez que você rodar o comando ...

wal -i "caminho-do-arquivo
Enter fullscreen mode Exit fullscreen mode

... você verá um preview de como ficará o tema do seu terminal.

No caso do meu "tiling window manager" o bspwm eu tenho um atalho no sxhkdrc:

# change background
super + b
    ~/.local/bin/wal -qi ~/img/backgrounds/
Enter fullscreen mode Exit fullscreen mode

também uma linha no início do bspwmrc:

~/.local/bin/wal -qi ~/img/backgrounds/
Enter fullscreen mode Exit fullscreen mode

E finalmente eu tenho uma linha no meu crontab que roda esse mesmo script a cada cinco minutos:

# crontab -e
# vim:et:sw=4:ts=4:cms=#%s:
# >/dev/null 2>&1   <- used to preven sending e-mail's
# env | grep -i display  to get your DISPLAY variable
# otherwhise feh will not be abble to change your background
# source: https://superuser.com/a/1122245/45032
DISPLAY=':0'
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/sergio/.dotfiles/algorithm/shell/bash/
XDG_PICTURES_DIR=/home/sergio/img
WALLPAPER_DIR=$XDG_PICTURES_DIR/backgrounds/
WAL=/home/sergio/.local/bin/wal
MAILTO=""
*/5    *    *    *    *  $WAL -qi $WALLPAPER_DIR
Enter fullscreen mode Exit fullscreen mode

Aleatoriedade em outros comandos

Para escolher uma música aleatoriamente eu poderia rodar o seguinte comando:

mpg123 $(ls **/*.mp3 | shuf -n 1)
Enter fullscreen mode Exit fullscreen mode

Mas mesmo o comando mpg123 tem a opção -Z que também faz a escolha aleatória

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay