gpt4 book ai didi

linux - 水平显示多个 bash 输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:12:37 25 4
gpt4 key购买 nike

我的机器上运行着 4 个重要的服务,我想一直看到它们。我有这个简单的 bash 脚本作为 bash 配置文件运行。

echo
PROC="nginx mysql php-fpm pptpd"
for p in $PROC
do
ps cax | grep $p > /dev/null

if [ $? -eq 0 ]; then
echo -e "\e[92m$p running\e[0m"
else
echo -e "\e[101m$p IS NOT RUNNING \e[0m"
fi

done
echo

这个脚本的输出是:

nginx running
mysql running
php-fpm running
pptpd running

我怎样才能让它变成这样?

nginx running - mysql running - php-fpm running - pptpd running

最佳答案

先将状态行构建成数组,然后打印数组:

status=()
for p in $PROC
do
if ps cax | grep -q $p; then
status+=( " \e[92m$p running\e[0m " )
else
status+=( " \e[101m$p IS NOT RUNNING \e[0m " )
fi
done
(IFS=-; echo -e "${status[*]}")

${status[*]} 扩展到数组中由 IFS 的第一个字符连接的每个元素,我将其设置为 - 早些时候。请注意,我使用了子 shell (IFS=-; echo ...),因此更改 IFS 不会影响脚本的其余部分。

其他说明:

ps cax | grep $p > /dev/null
if [ $? -eq 0 ]; then

可以合并为:

if ps cax | grep -q $p; then

这样更简洁易读。您也可以考虑改用 pgrep

关于linux - 水平显示多个 bash 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34982734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com