Eu quero ser saudado por
# #####################################################
# ### PostgreSQL 16.3 #################################
# #####################################################
no login em um servidor postgres.
então eu adiciono
echo "# #####################################################"
psql -qAtc "SELECT version()" | awk {'print $1, $2'}
echo "# #####################################################"
para o ~/.bashrc
.
Agora provavelmente preciso de algum tipo de echo
with $(psql -qAtc "SELECT version()" | awk {'print $1, $2'})
, mas não consigo descobrir como adicionar o início/final #
a ele.
Alguém pode me indicar a direção certa aqui?
Se você quiser fazer com que as linhas tenham o mesmo comprimento, a parte complicada é imprimir
#
dinamicamente a quantidade correta de sinais. Você poderia fazer algo assim (em Bash ou zsh):Isso abusa dos especificadores de formato printf para imprimir uma string vazia em um campo de uma determinada largura, produzindo tantos espaços. (ou seja,
%20s
preenche até 20 caracteres.) Os espaços são então substituídos pelo caractere que realmente desejamos.Então a caixa inteira poderia ser impressa com algo assim:
onde
width
está o número de#
sinais (após o inicial) e$(( width - ${#verstr} - 5))
simplesmente conta quantos restam para imprimir após a string da versão, o primeiro###
e os espaços de cada lado. Se isso der um resultado negativo, você obterá efeitos estranhos. :)Com
a saída é
(
printf -v var
e${var/pattern/replacement}
não são recursos padrão do shell. O primeiro pode ser substituído por uma substituição de comando, mas o segundo pode exigir a bifurcação paratr
.)Claro, se você não quiser ser tão sofisticado, é muito mais simples, por exemplo:
imprimiria algo como
e funcionaria em qualquer shell do tipo POSIX.
Ou, como mencionado nos comentários, você pode imprimir primeiro a linha completa de sinais de hash, depois um retorno de carro para retornar ao início e, em seguida, escrever sobre a linha sem a necessidade de contar caracteres. Em um terminal, o resultado é idêntico à impressão apenas do número necessário de caracteres, mas é claro que se você visualizar a saída com, por exemplo,
less
ou muitos outros programas, a diferença será visível.isso seria parecido com:
Você também pode usar uma ferramenta para arte ASCII , por exemplo install
boxes
. Para obter detalhes, consulte também a resposta longa na pergunta relacionada .Adaptei o exemplo :
Deve imprimir como:
Veja também:
Simplificado (somente versão)
Como
psql
já indica o nome do SGBD "PostgreSQL", a versão do servidor pode ser suficiente para impressão. Consultoria StackOverflow, linux - Qual versão do PostgreSQL estou executando? ,SHOW server_version;
retorna apenas o número da versão, o que torna a análiseawk
obsoleta. Isso simplifica o one-liner paraDeve imprimir:
Você deve ser capaz de gerar o resultado desse comando usando uma combinação de
$()
aspas como assim-Isso deve gerar os hashes, mas ainda avaliar e imprimir a
$()
parte como um comando.Na verdade, não vale a pena escrever código para algumas coisas, e esse é um desses casos.
Eu esperaria que a versão do PostGreSQL mudasse com pouca frequência, portanto, não deveria ser necessário calcular toda vez que você fizer login.
Já existe um mecanismo para mostrar o conteúdo de um arquivo estático para todos que fizerem login, sem precisar alterar
.bashrc
nada: basta escrever a mensagem desejada em/etc/issue.net
(e/etc/issue
) e deixarsshd
(e os outros métodos de login) cuidar de mostrá-la para o do utilizador.Se você deseja que a mensagem seja mostrada apenas para você e não para outros usuários, adicione
cat ~/.issue
ou.bash_profile
(.profile
o que existir) em vez de.bashrc
(que é executado em todos os shells interativos, não apenas quando você faz login).Então você só precisa providenciar
/etc/issue*
ou~/.issue
ser atualizado sempre que a versão do postgres mudar; pessoalmente, eu apenas editaria manualmente, mas ...Se você realmente deseja automatizá-lo, considere adicionar um
update-alternatives
gancho ou executar um cron job semanal. (Neste último caso, você desejará ter um script separado que faça a atualização; tentar amontoar todo o comando em umacrontab
linha precisa de extras\
que são difíceis de acertar.