好的,起初这似乎是一个基本问题,但请听我说。比标题看起来还要复杂!
这是我想要做的目标。我想输出到类似于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)"
答案 0 :(得分:1)
没有特别的理由必须将所有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
包含什么或应该显示在什么地方。