linux下shell脚本怎样实现多行输出在屏幕上 只显示一行 后一行的输出在屏幕上会覆盖前一行的输出?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下shell脚本怎样实现多行输出在屏幕上 只显示一行 后一行的输出在屏幕上会覆盖前一行的输出?相关的知识,希望对你有一定的参考价值。
so easy我记得很久以前还在红联混得时候我写过一个菜单的脚本,就是你这种功能的要求。
我当时是这么干的:
有个printf 这个和C语言里的printf函数的格式符都一样,所以可以用C里面的 \r 或者 \b 来搞
\r 光标移到行首
\b 退格
===这两个用哪个都可以,我当时用的是 \r
printf("第一句");
printf("\r"); 回到行首
printf(" \r"); 无数个空格后回到行首
printf("第二句");
当然 ,那两个可以合并 printf("\r \r"); 参考技术A 这个用echo标准输出语句可以一步到位。echo -ne “\r内容”
这样就能在原来的那一行覆盖上一行的内容。-n,不换行;-e和\r配合,光标移至行首。不换行,覆盖原内容。
如何记录 shell 脚本的输出并在屏幕上显示? [复制]
【中文标题】如何记录 shell 脚本的输出并在屏幕上显示? [复制]【英文标题】:How do I log output of a shell script and also display on the screen? [duplicate] 【发布时间】:2013-01-31 19:43:30 【问题描述】:我正在运行一个名为 upgrade.sh 的脚本
并且 upgrade.sh 调用一个名为 roll.sh 的脚本
roll.sh >> logfile.text
但是 roll.sh 有一些问题和提示,并且重定向会阻止这些输出显示在屏幕上。我无法编辑 roll.sh。
我也试过`results=$(roll.sh)
即便如此,输出也没有出现在屏幕上
【问题讨论】:
【参考方案1】:使用tee
,它是专门为此目的而创建的:将标准输入转发到屏幕和一个或多个文件。如果您不想覆盖它,请务必使用-a
选项附加到logfile.text
。
roll.sh | tee -a logfile.text
【讨论】:
我要补充的唯一一件事是您可能应该使用roll.sh 2>&1 | tee -a logfile.txt
来捕获错误输出【参考方案2】:
你想要tee
:
TEE(1) User Commands TEE(1)
NAME
tee - read from standard input and write to standard output and files
【讨论】:
【参考方案3】:处理这种情况的常用方法是让脚本将其提示写入 stderr 而不是 stdout。
【讨论】:
没错,但他说不能修改roll.sh
以上是关于linux下shell脚本怎样实现多行输出在屏幕上 只显示一行 后一行的输出在屏幕上会覆盖前一行的输出?的主要内容,如果未能解决你的问题,请参考以下文章
linux shell “cat <<EOF“的作用,用于连续输出多行文本(连续打印)(文本块)
linux shell “cat <<EOF“的作用,用于连续输出多行文本(连续打印)(文本块)