我有一个 shell 脚本,它有一个显示状态的函数,类似于:
display() {
clear
echo -e " Download In Progress\n"
echo -e " Please Wait \n"
echo -e " Step: $*"
}
然后 shell 脚本完成它的主要工作
display " 1 starting"
does some work
display " 2 complete"
display " 2 starting"
does some work
display " 2 complete"
我的问题是我的一个“做一些工作”是一个 C 程序,其中有几个 printf 语句。目前我已经将标准输出重定向到一个日志文件,这样我就可以在某个地方看到它们:
display " 1 starting"
/usr/bin/mycprogram >> /tmp/mylogfile.lg
display " 2 complete"
但我真正想要的是将标准输出写入“Step:”行。我可以简单地关闭重定向并在屏幕上显示输出,但它逐行将整洁的“正在下载”推离屏幕并留下难看的消息痕迹。
我如何将各个 printf 消息都放在同一行并保留我的标题?
最佳答案
/usr/bin/mycprogram | awk '{printf("%s, ",$0)}'
例如是将它变成单行的一种方法 如果你想要一种禁用换行的方法,你可以尝试
echo -ne "\x1b[?7l"
但可能不适用于所有终端。禁用换行肯定会停止垂直滚动,但可能会使您想要换行的其他输出变得一团糟。当你想要换行时
echo -ne "\x1b[?7h"
如果您不希望 echo 自动在回显的字符串末尾放置一个换行符(这样可执行文件的输出就在同一行:
echo -n "this will not put a newline at the end"
假设您想要这一切,包括换行:
echo -ne "Starting Step: $* \x1b[?7l"
/usr/bin/mycprogram | awk '{printf("%s, ",$0)}'
echo -ne "\x1b[?7h"
关于c - 从 C 程序将 printf 写入 shell 脚本的单行控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42651616/