我希望受到
# #####################################################
# ### PostgreSQL 16.3 #################################
# #####################################################
登录到 postgres 服务器。
所以我补充
echo "# #####################################################"
psql -qAtc "SELECT version()" | awk {'print $1, $2'}
echo "# #####################################################"
到~/.bashrc
。
我现在可能需要某种类型的,echo
但$(psql -qAtc "SELECT version()" | awk {'print $1, $2'})
不知道如何添加前导/尾随#
。
有人能给我指出正确的方向吗?
如果要使线条长度相同,棘手的部分是
#
动态打印正确数量的符号。您可以执行以下操作(在 Bash 或 zsh 中):这会滥用 printf 格式说明符在给定宽度的字段中打印空字符串,从而产生那么多空格。(即
%20s
填充到 20 个字符。)然后用我们实际想要的字符替换空格。然后整个盒子可以打印如下内容:
其中
width
是符号数#
(第一个符号之后),并且$(( width - ${#verstr} - 5))
只计算在版本字符串、第一个符号###
和两边的空格之后还剩下多少个符号需要打印。但是,如果结果为负数,则会产生奇怪的效果。:)和
输出是
(
printf -v var
并且${var/pattern/replacement}
不是标准 shell 功能。第一个可以用命令替换来替换,但第二个可能需要分叉到tr
。)当然,如果你不想那么花哨,那就简单多了,例如:
会打印类似
并且可以在任何类 POSIX shell 中工作。
或者,如评论中所述,您可以先打印整行井号,然后按回车键返回到开头,然后改写该行,无需计算字符数。在终端上,结果与仅打印所需数量的字符相同,但当然,如果您使用 eg
less
或许多其他程序查看输出,就会看到差异。看起来就像:
您还可以使用ASCII-art工具,例如 install
boxes
。有关详细信息,另请参阅相关问题中的长答案。改编示例:
应打印如下:
也可以看看:
简化版(仅限版本)
由于
psql
已经指明了 DBMS 名称“PostgreSQL”,因此服务器版本在打印输出中可能就足够了。咨询 StackOverflow,linux - 我运行的是哪个版本的 PostgreSQL?,仅SHOW server_version;
返回版本号,这使得使用 进行解析awk
变得过时。这将一行代码简化为应打印:
您应该能够使用
$()
和引号的组合来输出该命令的结果,如下所示:这应该输出哈希值但仍评估并打印该
$()
部分作为命令。有些事情实际上不值得编写代码,这就是其中一种情况。
我希望 PostGreSQL 的版本很少更改,因此每次登录时不需要进行计算。
已经有一种机制可以向每个登录的人显示静态文件的内容,而无需进行
.bashrc
任何更改:只需将您想要的消息写入/etc/issue.net
(和/etc/issue
)并让sshd
(和其他登录方法)负责将其显示给用户。如果您只希望将消息显示给自己而不显示给其他用户,请添加
cat ~/.issue
或.bash_profile
(.profile
无论存在的哪个)而不是.bashrc
(在每个交互式 shell 中运行,而不仅仅是在您登录时运行)。然后,您只需要在 postgres 版本发生变化时安排
/etc/issue*
或更新;就我个人而言,我只会手动编辑它,但是......~/.issue
如果您确实希望它自动化,请考虑添加一个
update-alternatives
钩子,或运行每周的 cron 作业。(在后一种情况下,您需要有一个单独的脚本来执行更新;尝试将整个命令塞进一行crontab
需要额外的操作\
,而这些操作很难正确完成。