【问题标题】:bash: How can I print an OK status on previous line after command exits?bash:命令退出后,如何在上一行打印 OK 状态?
【发布时间】:2014-05-02 16:13:56
【问题描述】:

考虑以下脚本来停止和启动 tomcat:

#!/bin/bash

# Shutdown tomcat and delete all the logs
echo --- Shutting down Tomcat...
sh /opt/tomcat/bin/shutdown.sh -force &> /dev/null
rm -f /opt/tomcat/logs/* &> /dev/null
echo OK

# Startup tomcat
sh /opt/tomcat/bin/startup.sh &> /dev/null

echo --- Starting up Tomcat...
until [ "`curl --silent --show-error --connect-timeout 1 -I http://localhost:8080 | grep 'Coyote'`" != "" ];
do
  sleep 10
done

echo OK

我希望能够在说明发生情况的消息的同一行显示 OK。我怎样才能做到这一点?

【问题讨论】:

  • 说明发生了什么的消息在哪里?
  • echo --- 关闭 Tomcat...
  • 我希望它在完成后更改为“echo --- Shutting down Tomcat...[OK]”.. 而不是“echo --- Shutting Tomcat...\n[好的]"

标签: bash


【解决方案1】:
echo -n "--- Shutting down Tomcat..."
...
echo OK

-n 抑制回显末尾的换行符。请注意,如果 Tomcat 服务器发出任何信息,它将在三个点之后启动。


正如 cmets 中指出的,您应该考虑:

printf "--- Shutting down Tomcat..."
...
printf "OK\n"

(虽然您可以将第二个保留为echo OK,但最好保持一致。)

【讨论】:

  • 还有printf '%s' "--- Shutting down Tomcat... "(可能更便携)。
  • 正确:使用printf 可以说更好。 echo 的问题在于不同的处理方式。使用的 System V shell echo "--- Shutting down Tomcat...\c";第 7 版 Bourne shell(实际上是 echo 二进制文件)使用了 -necho 的不同版本对给出的字符串进行不同数量和类型的解释。在某种程度上,POSIX 标准化了printf 命令以避免echo 的问题。另请参阅Bloated echo command
  • 同意,POSIX 明确表示将echo 与参数一起使用是一个黑洞之旅,错误,坏主意。黑洞很酷,但你不想被一个黑洞吃掉。
猜你喜欢
  • 2010-10-20
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2018-01-16
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多