Use o calendário incluído na shell CLI do Android

A shell mksh, incluída nos dispositivos Android, desde a versão 4.2, vem acompanhada de uma série de utilitários interessantes.
O seu smartphone tem possibilidades que você mal desconfia.

Quando estiver sem Internet e sem nada pra fazer e apenas com o seu smartphone na mão, brincar na shell CLI (Command Line Interface, ou “Interface da Linha de Comando”) pode ser uma alternativa.

Sei que a grande maioria das pessoas, não vai achar este tipo de coisa interessante… mas, enfim, eu nunca fiz parte desta “grande maioria” e adoro descobrir coisas novas no terminal.
Antes de continuar, certifique-se de ter instalado um emulador de terminal em seu smartphone ou tablet.
Feito isso, vamos conhecer o comando cal.

Como obter informações sobre datas e calendários no Android com o comando cal

Já adivinhou que “cal” é abreviatura de calendar ou “calendário”?
É um utilitário tradicional do mundo UNIX/Linux.


cal

     Junho 2017       
do se te qu qu se sá  
             1  2  3  
 4  5  6  7  8  9 10  
11 12 13 14 15 16 17  
18 19 20 21 22 23 24  
25 26 27 28 29 30  

No Linux, o utilitário vai destacar o dia atual, do mês — o que não ocorreu na CLI do meu celular (Android 7 Nougat).
linux shell cal command
Você pode obter o calendário de um determinado mês e ano, com o seguinte comando:


cal 8 2019

Em que o primeiro parâmetro é o número do mês do ano e o segundo o ano.
calendar 8 August 2019
Desta forma, sempre que precisar saber em que dia da semana cai um determinado dia do ano ou do mês, você pode usar este método autenticamente geek para descobrir.

10 dicas para personalizar o prompt do seu terminal

Quem usa o terminal com frequência pode ver grande utilidade na exibição de determinadas informações na linha de comando, na parte que vem antes do cursor.
A personalização pode ser uma brincadeira muito divertida para usuários comuns — mas os administradores, que precisam acessar servidores diferentes podem se beneficiar com command line prompts diferenciados (o que ajuda a saber exatamente em que servidor e diretório você está executando algum comando).
Na série de artigos Como personalizar o prompt da linha de comando no UNIX/Linux, abordei várias formas de configurar:

  • parte 1  — ajustes básicos do prompt
  • parte 2  — como adicionar informações do sistema ao prompt e tornar as mudanças definitivas
  • parte 3  — como colorir o prompt de comando
  • parte 4  — como passar informações do prompt para a barra de títulos do seu terminal

Se você tiver dúvidas, sugiro a leitura dos textos acima. Assim evitamos redundâncias neste artigo e que ele fique mais longo do que o necessário. 😉

Em outras palavras, este post assume que você já detém o conhecimento do que foi discutido naqueles artigos, de forma que possamos ser bem mais objetivos aqui.

Se você acompanhar as tags emulador de terminal e bash vai encontrar outros textos interessantes relacionados a este assunto também.

Exemplos de prompt que você pode experimentar agora

Os exemplos, que seguem, podem ser experimentados de imediato. Basta copiar e colar no seu terminal Linux, Unix ou mesmo no Bash do Windows (eu não testei isso).
Sinta-se encorajada(o) a modificá-los para atender melhor às suas necessidades. Se quiser compartilhar alguma dica de uso, fique á vontade para postar nos comentários.
Como primeiro exemplo, veja este prompt que exibe um smiley sorrindo para comandos normais e um triste para quando você digitar um comando errado:

PS1="\t \w \`if [ \$? = 0 ]; then echo \:\); else echo \:\(; fi\` " 

experimente digitar comandos errados, para ver a mudança no “humor” do smiley.
O código abaixo, exibe uma carinha um pouco diferente para cada tipo de “humor”:

PS1="\`if [ \$? = 0 ]; then echo \\\^\\\_\\\^; else echo \\\-\\\_\\\-; fi\`*\u \w:\h)"

Uma variação deste prompt, exibe um smiley mais simples:

PS1="\t \w \`if [ \$? = 0 ]; then echo \:\); else echo \:\(; fi\` " 

Os próximos exemplos usam smileys coloridos:

PS1="\[\e[01;32m\]\u@\h \[\e[01;34m\]\W \`if [ \$? = 0 ]; then echo -e '\e[01;32m:)'; else echo -e '\e[01;31m:('; fi\` \[\e[01;34m\]$\[\e[00m\]"

A configuração abaixo acrescenta o número do comando no histórico, no começo da linha.

PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`[\u@\h:\w]\\$ "

Se quiser saber mais sobre as cores e seus códigos, clique aqui.
Prompts em múltiplas linhas, podem conter uma quantidade maior de informações. Por outro lado, alguns usuários acham que isto polui o visual do terminal, que deveria ser um pouco mais espartano.
exemplo de prompt de comando
Se você não se importa com uma ou duas linhas a mais no prompt, mas prefere obter algumas informações imediatas, o exemplo que segue exibe o número de arquivos presentes no diretório atual e o espaço ocupado por eles.

PS1="\n\[\033[35m\]\$(/bin/date)\n\[\033[32m\]\w\n\[\033[1;31m\]\u@\h: \[\033[1;34m\]\$(/usr/bin/tty | /bin/sed -e 's:/dev/::'): \[\033[1;36m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files \[\033[1;33m\]\$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\033[0m\] -> \[\033[0m\]"

Ao contrário do anterior, este é simples (espartano), só que usa cores. Você pode usá-lo, como base, para criar algo mais sofisticado.

PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

Segue uma versão minimalista em 2 linhas:

PS1="[\[\033[32m\]\w]\[\033[0m\]\n\[\033[1;36m\]\u\[\033[1;33m\]-> \[\033[0m\]"

Gosto muito desta versão, abaixo, com informações sobre o diretório atual e sem excesso de cores:

PS1="\n\[\e[30;1m\]\[\016\]l\[\017\(\[\e[34;1m\]\u@\h\[\e[30;1m\])-(\[\e[34;1m\]\@ \d\[\e[30;1m\])->\[\e[30;1m\]\n\[\016\]m\[\017\]-(\[\[\e[32;1m\]\w\[\e[30;1m\])-(\[\e[32;1m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') files, \$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\e[30;1m\])--> \[\e[0m\]"

Atualmente, gosto do meu assim:

PS1="\n\[\e[34;1m\]\u@\h\[\e[30;1m\] \[\e[34;1m\][ \d, \@]\[\e[30;1m\]\n\[\e[30;1m\]kernel: \$(/bin/uname -r)\n\[\e[32;1m\]\w\[\e[30;1m\] (\[\e[34;1m\]\$(/bin/ls -1 | /usr/bin/wc -l | /bin/sed 's: ::g') arquivos, \$(/bin/ls -lah | /bin/grep -m 1 total | /bin/sed 's/total //')b\[\e[30;1m\])--> \[\e[0m\]"

Referências

https://slashdot.org/comments.pl?sid=108424&cid=9219400.
https://www.maketecheasier.com/8-useful-and-interesting-bash-prompts/.

Como personalizar o prompt da linha de comando no UNIX/Linux — parte 4

A personalização do prompt da linha de comando pode ir além de todas aquelas as informações sobre o sistema antes do cursor.
Se você prefere ter menos “coisas” no prompt, mas não quer abrir mão de algumas informações, saiba que é possível enviar alguns destes itens para a barra de títulos do console.
Tudo o que você precisa é acrescentar um pouquinho de código ao que você já tem no seu PS1 — como foi abordado na parte 1, parte 2 e parte 3 desta série de artigos.
O pedaço de código a mais segue aí, embaixo:

"\e]2;texto para a barra de titulo\a"

Basta substituir a cadeia “texto para a barra de titulo” pelo que você achar melhor.
O código para inserir data e hora na barra de título segue abaixo:

\e]2;\d, \t - \u@\h\a

Para ter efeito imediato, acrescente este código ao valor do seu PS1, conforme destacado, abaixo:

PS1='\e]2;\d, \t - \u@\h\a \[\e[0;33m\][\T]\n\[\e[1;36m\] \w > \[\e[0;32m\]'

data hora barra de título

Obviamente, o recurso nem sempre vai funcionar. Quando você estiver usando uma interface 100% caractere (CLI), conectado remotamente a um sistema headless ou, simplesmente, usando o terminal em tela cheia (F11), por exemplo.
Nestes casos, não será possível ver qualquer barra de títulos.

Como personalizar o prompt da linha de comando no UNIX/Linux — parte 3

Neste texto vou mostrar como é fácil aplicar cores às informações exibidas no prompt da linha de comando do seu terminal.
Esta é a terceira parte de uma série de artigos sobre como configurar o prompt do seu emulador de terminal e serve para todos os Linux e UNIX (o que inclui os BSD e o MacOS), desde que estejam usando o Bash como emulador — por causa disto, talvez dê para incluir o Windows também nesta história.
Como, neste momento, não tenho um Mac em mãos, só pude testar os exemplos dados no Linux (Fedora 25, Debian 9 e OpenSUSE Tumbleweed).
Se você tiver alguma dúvida, durante a leitura, dê uma olhada nos links ou nos outros artigos (parte 1 e parte 2) desta série — tenho certeza de que a resposta estará em um destes lugares.

A tabela de cores

Use a relação de códigos de efeitos e cores, abaixo, para alterar os exemplos de prompt.

  • 0 —  efeito nenhum
  • 1 —  efeito negrito ou cor mais forte. Transforma a cor preta em cinza em alguns terminais
  • 2 —  efeito esmaecido ou mais fraco. Transforma a cor branca em cinza em alguns terminais
  • 3 —  efeito itálico
  • 4 —  efeito sublinhado
  • 7 —  efeito de inversão das cores
  • No tempo dos monitores monocromáticos, em fósforo, os efeitos eram muito úteis para ajudar a diferenciar tipos de arquivos e tornar mais legíveis os textos de interação com os usuários em scripts.
    Segue a lista de cores de frente ou foreground:

  • 30 —  preto
  • 31 —  vermelho
  • 32 —  verde
  • 33 —  amarelo
  • 34 —  azul
  • 35 —  púrpura
  • 36 —  ciano
  • 37 —  branco
  • Segue a lista de cores de fundo ou background:

  • 40 —  preto
  • 41 —  vermelho
  • 42 —  verde
  • 43 —  amarelo
  • 44 —  azul
  • 45 —  púrpura
  • 46 —  ciano
  • 47 —  branco

Os primeiros códigos (referentes aos efeitos) não irão funcionar em todos os emuladores de terminal. Portanto, não espere muito deles.
Você também pode encontrar uma tabela de cores no site do Mewbie: http://www.mewbies.com/geek_fun_files/color_scripts/color_scripts_codes.png.
ansi color codes table

Experimente as cores

As relações de cores ANSI podem ser usados em várias ocasiões. Quando estiver fazendo um script, na maioria das linguagens é possível colorir o texto de saída, para interagir com o seu usuário.
Você pode usar este código Bash, para experimentar as cores e os efeitos dados acima:

# as letras do texto na cor ciano ou cyan
echo -e "\e[36mQue cor é esta?"

Se quiser alterar apenas a cor de fundo…

# cor de fundo vermelho
echo -e "\e[41mQue cor é esta?"

Para aplicar o efeito negrito:

# vermelho forte
echo -e "\e[1;31mQue cor é esta?"

Aplique o efeito itálico; cor de frente ciano; cor de fundo amarelo:

echo -e "\e[3;36;43mQue cor é esta?"

Eu sei que dá para ficar brincando horas com isso aí… mas a gente precisa voltar a falar do command prompt.

Como aplicar cores ao prompt da linha de comando

Baseado nos exemplos dos artigos anteriores, aplique as cores, inserindo um dos códigos dos exemplos acima, tal como destacado abaixo:

PS1='\[\e[3;36m\][\d, \T]\n\[\e[0;33m\]\u@\h\[\e[1;36m\][ \w ] '

Note que a diferença é que o código de cores do PS1 precisa estar entre os caracteres “ \[\e[ ” e “ \] “.
Sinta-se à vontade para compartilhar, nos comentários, como você configurou o seu prompt!

Referências

http://www.mewbies.com/acute_terminal_fun_08_get_colorized_on_the_terminal.htm#color_scripts.
https://en.wikipedia.org/wiki/ANSI_escape_code#Colors.

Como personalizar o prompt da linha de comando no UNIX/Linux — parte 2

O prompt da linha de comando, que é exibido antes do cursor piscante, pode ser personalizado de diversas formas.
No texto anterior, mostrei algumas formas básicas de personalização.
Para dar continuidade, vou mostrar como inserir algumas informações úteis sobre o sistema, que podem ajudar você a se situar melhor no terminal.

Os exemplos foram testados no Linux (Debian 9, Fedora 25 e openSUSE Tumbleweed), mas você pode aplicá-los em outras distribuições ou em consoles UNIX, como os BSD ou próprio MacOS.

Clique nos links, no decorrer do texto, para obter mais informações sobre algum assunto específico.
Como já sabemos, a variável de ambiente a ser alterada é PS1 e ela pode ser mudada direto na linha de comando (CLI).
O que vou mostrar é que você pode usar uma série de caracteres de escape que exibem informações sobre o seu sistema.
Na parte 1 deste artigo, mostrei o uso de 2 caracteres de escape: \n e \a — para pular uma linha e para acionar o “sininho” do sistema, respectivamente.
Veja uma lista mais completa:

  • \a — aviso sonoro do sistema ou bell character
  • \d — exibe a data no formato nome do dia da semana, nome do mês e dia do mês. Por exemplo: “Tue May 26” (se o seu sistema estiver em inglês) ou “sáb mar 04” (em português).
  • \D{formatação} — neste caso, você precisa oferecer a formatação que deseja para a exibição da data. Se você não especificar o formato desejado, ele usará a representação padrão da localidade para a qual a sua máquina estiver configurada. De qualquer forma, você precisa usar as chaves {}, mesmo que vazias.
  • \e —  imprime um caractere de escape padrão. Muito usado para inserir informações sobre cores (como veremos mais pra frente).
  • \h —  o hostname do seu sistema ou nome parcial do hospedeiro (anfitrião).
  • \H —  o hostname completo.
  • \j —  o número de trabalhos (jobs) em execução e gerenciados pela shell neste momento.
  • \l —  o nome base do dispositivo de terminal.
  • \n —  insere uma nova linha.
  • \r —  um carriage return ou novo parágrafo.
  • \s —  o nome parcial da shell em execução.
  • \t —  a hora atual do sistema no formato 24h HH:MM:SS.
  • \T —  a hora atual do sistema no formato 12h HH:MM:SS.
  • \@ —  a hora atual do sistema no formato 12h am/pm.
  • \A —  a hora atual do sistema no formato 24h HH:MM.
  • \u —  o nome do usuário atual.
  • \v —  a versão da shell em execução.
  • \V —  a versão do release + patchlevel.
  • \w —  o diretório de trabalho atual, com $HOME abreviado para ” ~ “. Usa o valor da variável de ambiente $PROMPT_DIRTRIM.
  • \W —  o nome base do $PWD, com o $HOME abreviado.
  • \! —  o número desta linha de comando no histórico do sistema.
  • \# —  o número do comando em execução neste prompt.
  • \$ —  define o caractere do prompt a ser exibido. Se o uid for 0 (root), exibe um “#”. Para qualquer outro uid, exibe um “$”.
    Esta informação, no command prompt pode evitar que você execute comandos perigosos quando estiver logado como superusuário.
  • \nnn —  imprime o caractere cujo valor octal é igual a nnn.
  • \\ —  se você precisa de uma backslash
  • \[ —  inicia uma sequência de caracteres não-imprimíveis. Pode ser usado para embutir uma sequência de controle de terminal no seu prompt.
  • \] —  finaliza a sequência de caracteres não imprimíveis.

Exemplos de uso de caracteres de escape no prompt do terminal

Tendo a lista acima como referência, fica fácil alterar os exemplos que seguem, para obter o resultado que você deseja para personalizar o seu prompt.
Veja o nome do usuário junto com o caractere de identificação do uid:

PS1="\u \$ -> "

Não se esqueça de sair do modo root, com o comando exit.
Para imprimir o nome de usuário e o hostname ao lado do prompt, use os seguintes caracteres:

PS1="\u-\h -> "

Você pode incluir a data e a hora atuais em uma linha e o diretório atual em outra:

PS1="\d \t\n\W -> "

O resultado é um prompt em 2 linhas:

sáb mar 04 14:30:54
documentos ->

Não esqueça que o seu diretório home será representado por um “~” (til).
Você tem total liberdade para compor o seu prompt com outros caracteres:

PS1="«\d, \t »\n\u@\H «\w» "

Faça várias experiências para determinar como deseja que o seu prompt definitivo fique.

Como tornar as mudanças permanentes

Tudo o que você precisa é acrescentar a linha de configuração do PS1, que você acabou de criar, dentro de um dos arquivos de inicialização do Bash: o .bashrc ou o .bash_profile. Usualmente, é o primeiro.
Na maioria das distribuições Linux ou UNIX, esta a linha de configuração do PS1 já existe e só precisa ser alterada para o que você deseja.
Se não houver uma linha de configuração do PS1, adicione uma ao final do arquivo.
O comando echo pode ser usado, para introduzir a sua configuração direto na última linha do arquivo. Veja um exemplo:

echo "PS1='«\d, \t »\n\u@\H «\w» '" >> .bashrc

Repare em 3 coisas, relacionadas à linha de comando acima:

  1. o uso das aspas duplas e simples, para não confundir o comando.
  2. o uso de “>>” para adicionar a linha ao final do arquivo .bashrc. Se você usar apenas uma “>”, irá sobrescrever o arquivo inteiro com esta única linha de comando. Tenha cuidado, portanto.
  3. se já houver alguma configuração anterior, dentro do arquivo, ela será sempre sobreposta pela última linha adicionada.

Vamos dar um passo adiante?! Que tal personalizar também as cores do seu prompt?!

https://elias.praciano.com/2017/03/como-personalizar-o-prompt-da-linha-de-comando-no-unixlinux-parte-1/.
https://www.gnu.org/software/bash/manual/bashref.html#Controlling-the-Prompt.
http://www.linfo.org/uid.html.