c - 从 C 程序将 printf 写入 shell 脚本的单行控制台

标签 c linux sh

我有一个 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/

相关文章:

c - C 中的 size_t 是什么?

c - MPI_Send 仅适用于静态分配的缓冲区

linux - 尝试计算 BASH 中的圆的半径和面积

linux - 网络设备的 ACL

regex - 将 bash =~ 运算符更改为 sh 兼容参数

在 ruby​​ 中将值从符号转换为字符串

c - 在c中反转字符串

linux - 正确分配堆栈以克隆线程

linux - mkdir 中的详细选项是什么?

python - 打开终端,运行 python 脚本并保持打开状态以获得结果?