好吧,乍一看这似乎是一个基本问题,但请听我说。它比标题看起来更复杂!
这是我正在尝试做的目标。我想输出到类似于 Linux 启动的控制台。
Operating system is doing something... [ OK ]
现在这似乎很明显......只需使用 printf 并设置列。这是第一个问题。控制台需要先打印动作
Operating system is doing something...
然后它需要实际完成工作,然后继续输出到与 [ OK ] 相同的行。
这似乎再次使用 printf 很容易做到。只需完成工作(在这种情况下,调用函数)并返回条件检查,然后完成运行 printf 以输出 [ OK ] 或 [ FAIL ]。这在技术上是有效的,但我在这样做时遇到了很多并发症。这是因为该函数必须在子外壳内调用,而且我无法传递我需要的某些变量。所以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
它包含什么或它应该显示在哪里。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句