问题标签 [tput]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
248 浏览

bash - Bash - 正确清除最后一个输出

我正在尝试创建一个可更新的进度状态。为了做到这一点,我需要能够完全清除最后一个输出,以便我可以更新它。回车可以工作,但是当输出长于终端宽度并回绕时,将无法清除最后一个输出。所以我正在使用 tput:

但是,如果输出足够长以迫使终端向上滚动,这将失败。发生这种情况时,保存的光标位置不再正确,并且无法正确清除最后的输出。

例如,如果光标当前位于终端底部并且输出长于终端宽度,它将强制终端向上滚动,使之前保存的光标位置无效。

那么有什么方法可以确保光标永远不会在 Bash 中的终端结束?或者也许有一些其他的替代方法来防止这个问题?

编辑:我根据 F. Hauri 的回答制作了自己的版本,简化了我的用例

0 投票
1 回答
362 浏览

shell - man、screen 和 vim 等程序如何创建临时覆盖?

几个 *NIX 命令,例如screen、和其他命令manvim在 shell 环境中创建临时画布/屏幕/覆盖。当此类程序执行时,它们会覆盖或隐藏之前在终端中显示的任何内容——几乎就像终端窗口中的“全屏”模式一样。然而,当它们终止时,它们会显示或恢复之前在终端上的任何内容。

在下面的示例中,我在屏幕上创建了一些填充文本,然后调用man bash. 手册页打开并覆盖终端显示上的所有其他字符。当我关闭手册页时,被掩盖的字符再次显示出来。

运行 <code>man bash</code> 之前的终端屏幕截图

当示例全屏程序正在运行时

Bash 手册页的屏幕截图

运行 <code>man bash</code> 后的终端截图

我希望写入 stdout/stderr 的程序可以完成第一步(用程序特定的内容替换终端的内容),但是它会产生大量的文本,我可以滚动浏览,因此不能这样做第二步:恢复终端内容。这意味着程序要么以某种方式记住屏幕的先前内容并重新输出它们(我对此表示怀疑?),要么它在终端中创建某种子窗口,而其他东西则跟踪终端的先前内容.

我的问题

如何在我自己的程序和/或脚本中完成该行为?

也许我应该使用 curses/ncurses、tput、termcap/terminfo 或 ANSI 转义序列?

更新:

这个修改后的问题与https://unix.stackexchange.com/questions/27941/show-output-on-another-screen-and-return-to-normal-when-done基本相同。(尽管进行了大量搜索,但当我写下这个问题时,我还没有找到它。)不同之处在于我的问题更笼统(任何语言),而这个问题是特定于 Bash 的。这两个问题的答案基本相同。如果它与另一个网站上的问题过于相似,请随时在此处关闭

0 投票
1 回答
294 浏览

bash - How to display text at the bottom of the terminal window, and make it stay there, in Bash?

I am using a while loop to perform an ffmpeg operation that makes a bunch of files, and I want an indicator at the bottom of the screen that says what file I am on, that stays at the bottom of the screen, while ffmpeg is giving output. Sort of similar to how in the apt package manager, there is a progress bar that is always at the bottom, while it gives output information above it. I don't need a progress bar, just a string of text containing the file number to always be at the bottom.

A very simplified version of my code:

0 投票
2 回答
109 浏览

shell - 重定向 stderr 会更改 tput 的输出,但仅在将输出捕获到变量时?

我正在尝试在脚本中获取当前终端窗口的宽度,并使用 80 作为后备以防万一。我认为这很简单:

100 是正确的,我将终端设置为 100 个字符宽。由于cols没有符合 POSIX 的参数tput,因此并非所有系统都支持它,因此是回退。现在让我们测试回退:

嗯……不太好。我不想看到那个错误。它印在 上stderr,所以让我们压制它:

是的,这样好多了。所以最终的代码是

80?怎么回事?为什么它现在遇到后备?让我们试试这个:

啊……重定向stderr改变了输出tput?这怎么可能?让我们确认一下:

好吧,现在我迷路了!有人可以解释一下这里发生了什么吗?

0 投票
0 回答
146 浏览

java - Quarkus:如何以特定颜色打印日志?

我有一个带有 Quarkus 服务的多模块 Gradle 项目。我一起运行它们,我希望能够按颜色区分日志。我想要不同的服务以不同的颜色打印日志(以便我可以轻松区分它们)。

我正在尝试使用tput它。这是我启动特定服务的方式:

这应该将输出绘制为红色。它对 Gradle 日志正确执行,但 Quarkus 日志的行为似乎无法预测。有时它们被绘制,但更多时候它们不是(代码没有变化)。

问题:如何将 Quarkus 原木绘制成不同的颜色?如何动态设置颜色?

我将不胜感激任何解决我的问题的想法(即使他们没有回答我的问题)。

0 投票
1 回答
86 浏览

bash - 使用 tput rc 时如何清除读取输入?

我想test被清除。

0 投票
0 回答
39 浏览

bash - 如何以粗体字母获取 shell 脚本的日志

我编写了一个 Bash 脚本来将本地文件夹中的所有文件同步到 s3 存储桶。当脚本通过 cron 作业运行时,所有日志都会发送到电子邮件。电子邮件输出如下所示:

------------开始于:星期三 3 月 3 日 10:56:01 +04 2021------------- --------------
开始上传到 s3 存储桶 mohsin7007 已完成 1.8 KiB/15.5 KiB (5.2 KiB/s),剩余 3 个文件上传:../home/mohsin/Desktop/ data2s3/README.md 到 s3://mohsin7007/README.md 完成 1.8 KiB/15.5 KiB (5.2 KiB/s) 剩余 2 个文件 完成 12.9 KiB/15.5 KiB (15.0 KiB/s) 和 2 个文件( s) 剩余上传:../home/mohsin/Desktop/data2s3/LICENSE 到 s3://mohsin7007/LICENSE 已完成 12.9 KiB/15.5 KiB (15.0 KiB/s),剩余 1 个文件已完成 15.5 KiB/15.5 KiB (18.0 KiB/s) 剩余 1 个文件
------------------------完成时间:3 月 3 日星期三 10:56:01 +04 2021--------------

我想加粗“开始于”和“完成于”行。因此,在查找某个日期的日志时,它会更具可读性,如下所示:
------------------------开始于:3 月 3 日星期三10:56:01 +04 2021---------------------------

我使用 Tput 实用程序使这些行加粗,但是,问题是当我在终端中运行脚本时,结果与预期一致。但是,当我打开日志文件或查看电子邮件中的日志时,结果不是粗线。你们能否帮助我,我怎样才能得到上面提到的粗体字母行, 我也在这里粘贴我的脚本。

0 投票
1 回答
130 浏览

python - Python在打印后更新多行

打印后如何更新python中的多行?

像这个例子:

在此处输入图像描述

python里面的东西tputhttps://linux.die.net/man/1/tput )。

谢谢

0 投票
1 回答
152 浏览

bash - 如何在 bash(Ubuntu 18.04)中一段时间​​后手动停止闪烁的 printf 命令(使用 tput)?

我知道我可以使用以下命令来闪烁 prinf 或 echo 命令,但是如何在一段时间后或进程完成后停止它?我正在编写一个脚本,闪烁表示正在执行一个进程,一旦它停止,用户就知道该步骤已完成。

0 投票
1 回答
73 浏览

ruby - tput:在使用 Ruby Net:SSH 时没有指定 $TERM 的值并且没有指定 -T

我正在使用 Ruby Net:SSH lib 与远程 PC 建立 ssh 连接,然后执行远程 cmd。当我开始我的 SSH 连接时,我没有问题,但有时,不是在任何地方,当我使用 exec 时!我有一个错误返回到 stderr,它是“tput:$TERM 没有值并且没有指定 -T”。

代码示例:

如果有人有想法或已经有这个问题。

cat 的示例工作正常,如果我使用它,我会收到“tput”错误:

如果我使用它,我没有错误:

问候。