bash - 在保留列的同时将 Bash 输出到同一行
问题描述
好的,起初这似乎是一个基本问题,但请听我说完。它比标题看起来更复杂!
这是我想要做的目标。我想输出到类似于 Linux 引导的控制台。
Operating system is doing something... [ OK ]
现在这似乎很明显......只需使用 printf 并设置列。这是第一个问题。控制台需要先打印动作
Operating system is doing something...
然后它需要实际完成工作,然后通过 [OK] 输出到同一行继续。
这似乎再次使用 printf 很容易做到。只需完成工作(在这种情况下,调用一个函数)并返回一个条件检查,然后完成运行 printf 以输出 [ OK ] 或 [ FAIL ]。这在技术上是可行的,但我在这样做时遇到了很多并发症。这是因为该函数必须在子 shell 中调用,而我无法传递我需要的某些变量。所以 printf 出来了。
只使用 echo -n 怎么样?那应该有效吗?回显第一部分,运行函数,然后根据返回到同一行继续回显。这个解决方案的问题是我不能再保留我可以使用 printf 的列格式。
Operating system is doing something... [ OK ]
Operating system is doing something else... [ OK ]
Short example... [ OK ]
有什么建议可以解决这些问题以获得有效的解决方案吗?谢谢
这是我尝试使用 printf 的另一种方法。这给人一种工作的错觉,但该方法实际上是有缺陷的,因为它没有给你进度指示,即函数在打印出函数正在运行之前首先运行。“嘿,我在做事”会立即打印出“嘿,我做完了”的消息。结果,它毫无意义。
VALIDATE $HOST; printf "%-50s %10s\n" " Validating and sanitizing input..." "$(if [ -z "$ERROR" ]; then echo "[$GREEN OK $RESET]"; else echo "[$RED FAIL $RESET] - $ERROR"; echo; exit; fi)"
解决方案
没有什么特别的原因必须将所有 printf 字符串打印在一起,除非您担心您调用的某些代码会移动光标。
重新排序您的示例:
printf "%-50s " " Validating and sanitizing input..."
VALIDATE $HOST
if [ -z "$ERROR" ]; then
printf "%10s\n" "[$GREEN OK $RESET]";
else
printf "%10s\n" "[$RED FAIL $RESET] - $ERROR"
echo
exit
fi
我不知道$ERROR
它包含什么或应该显示在哪里。
推荐阅读
- spring-boot - Hibernate:删除具有两种不同父实体的子实体
- javascript - 如何在按钮单击事件的 iframe 中滚动到 pdf 的下一页?
- .net-core - DB2 .Net 连接器错误:AESEncryptADONet
- android - Expo - 运行 adb 时出错:多个设备/模拟器
- google-cloud-platform - 如何恢复 GCP 项目服务帐号
- html - 如何在 css 中构建一个 civ
- reactjs - 为不同的 Firebase 项目(环境)自定义 React 应用构建
- javascript - 当 url 错误时,为什么 createElement 中没有任何错误
- linux - 当我运行 docker-compose up 命令时,出现此错误。有人可以帮助我吗?
- ruby-on-rails - ransack + AASM:ArgumentError 参数数量错误(给定 1,预期为 0)