- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行的代码会在一个多小时内产生大量输出。在执行期间,我使用 tee
将我的输出记录到一个文件中。然而,仍然发送到我的终端的大量输出有点麻烦,所以我做了一个小函数 ShowLastLines
我可以通过管道输出我的输出,它只会显示最后 15 行输出并实时更新。
这是脚本:
function ShowLastLines {
numberoflines=15
i=1
while read var
do
echo $var
if [ $i -gt $numberoflines ]
then
tput sc && tput cuu $(( $numberoflines +1 )) && tput dl 1 && tput rc && tput cuu 1
fi
(( i++ ))
done
}
在实践中我是这样使用它的:
( long code ) 2>&1 | tee output.log | ShowLastLines
这按预期工作得很好,但是我想再添加一项功能,即我想在按下空格键时暂停输出(在 ShowLastLines
中,当然不是在原始执行中) (例如,调查我注意到的一些细节),并在我再次按下空格键时让它继续(它将 catch 执行输出)。
我尝试了一些东西,但到目前为止还没有成功。我相信这可能是通过使用 stty
(如 this thread )将标准输入置于非阻塞模式来完成的:
stty -echo -icanon time 0 min 0
但我无法将它与我现有的阅读
结合起来。
一个重要的旁注:我在 AFS 集群上,所以由于不同机器之间的同步是如何实现的,所以在计算完成之前我无法访问日志文件(由 tee
编写) (我知道否则在日志文件上使用 tail -f
会更容易)。
Ps:最有用的实现是,当通过按空格键暂停输出时,可以在输出中向上滚动以显示之前的行。欢迎提出任何建议,但我意识到这可能需要一个完全不同的实现,可能会增加大量计算开销,因此我很高兴有一个通过空格键提供简单暂停的解决方案。
最佳答案
这可能最好通过使用 select()
同时从管道和用户读取输入的实际程序来完成。
但是,在 Bash 脚本中,您可以使用带有小超时的 read
来检查用户是否按下了一个键:
buf() {
stty -echo < /dev/tty
while read line ; do
echo "$line"
if read -n1 -t0.0001 -u3 3</dev/tty ; then
echo paused.
read -n1 -u3 3</dev/tty
fi
done
stty echo < /dev/tty
}
read -n1
不会等待整行,而是在接收到一个字符后立即返回。我们需要从 /dev/tty
中读取
(stderr 也可能这样做),因为我们期望来自 stdin 的管道输入,如 somecmd |缓冲区
。
这里的缺点是,如果您停止输出的时间过长,管道将停止并停止产生输出的进程。您可以使用 pv
解决此问题(例如,...| pv -qB 64k |...
)在管道中充当缓冲区。尽管在阅读端暂停时查看发送的输出有些困难。
如评论中所述,您也可以使用终端仿真器的缓冲来执行此操作。这将有同样的缺点,即停止输出太久会再次停止管道的写入端。
关于Bash:暂停并使用空格键继续执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43761402/
我在tinyMCE中遇到了一个奇怪的问题,即我无法在完整框架之外进行复制。整个问题仅在FireFox中运行,因为它仅支持FF,因此问题仅限于FF。 我使用AJAX调用来动态加载tinyMCE的一个或多
我的 JS 在这里: $('input[type=submit]').click(function () { var val = $('#message_content').scedito
我需要一些关于如何解决我的问题的想法。我有以下带有表格的 html 模板。它显示 5 行,在每行的末尾(在最后一个 td 中)有一个按钮触发 Bootstrap 模式(弹出窗口)。我正在使用空格键 {
我有以下代码: ...... 如何在空格键模板的 if 条件中使用 AND/OR ? 最佳答案 空格键无法处理逻辑表达式,因此您需要创建一个帮助程序来处理计算。 其实你可以实现and具有嵌套 if
我正在用 JavaScript 编写代码,目标是 Chrome。 现在,考虑以下情况: 我在网页上按空格/退格键 vs 我在文本框上按空格键/退格键 通过使用 (goog.events.listen
我在实现 RoutedUICommand 的 RoutedCommand 类中处理命令。如果需要,这将帮助我通过检查他们的 CanExecute 和 Execute 来阻止或覆盖命令。我可以覆盖 Ed
基本上,我想制作一个计算 10 秒内空格键按下/按钮点击次数的游戏。我制作了一个倒数计时器,两个计数器都工作正常 我找不到停止按键计数的方法(在计时器停止后),所以我使用了“禁用”按钮,但如果有更好的
我遇到了一个问题,selenium 无法按住不在此列表中的键 - Keys.SHIFT, Keys.CONTROL, Keys.ALT, Keys.META, Keys.COMMAND, Keys.L
我有一个集合,其值类似于 { "pctFail": "0.3515500159795462"} ,当我将其传递给模板并显示为 {{myTemplate}}% 时,它在我的 html 中显示为0.351
{{#each}} 中 {{#if}} 的这个简单示例产生了意想不到的(对我而言)结果: HTML: test {{> test yes=true}} template nam
我使用下面的代码创建一个带有对话的 MessageBox。默认情况下,yes 按钮具有焦点。如果我不小心按了空格键,对话框就会明白我选择了是。我只希望按下回车键触发事件。有没有办法禁止 Space 键
我愿意根据 Session 变量设置我的应用程序的 header 。 这是空格键模板: {{#if session 'header'}} {{#if session 'header_le
我的问题: ^space & c:: send {F2} send {Escape} 但它没有用,我如何模拟 Ctrl+Space + AlphabeticaklKey ? 最佳答案 正如我之前的演讲
我正在 Visual Studio 2008 中开发 MFC 应用程序。我有一个带有复选框的 CListCtrl 对象。我想知道是否有一种简单的方法可以让空格键切换所有突出显示的项目。现在,在按下空格
我有一个本地全屏 AIR 应用程序(从服务器加载多个 SWF),我正在尝试使用 ALT+作为捷径。 但 Windows 操作系统拦截了 ALT键,例如当我按下 ALT+Space 时显示左上角窗口菜单
我刚刚开始使用 Eclipse,我注意到当我开始输入本地变量名称时,它不会像 Visual Studio 那样提供建议,直到我按 Ctrl+Space 。有什么办法让它自动执行此操作吗?我发现 Ctr
Enter keyCode(13) 在所有浏览器上都能正常工作。 空格键 keyCode(32) 我在 Chrome 上测试工作正常但在 Firefox 上没有响应。我使用了以下代码: fu
我有一个 jQuery UI 对话框,其中有足够的内容来触发垂直滚动条的出现。我发现使其滚动的唯一方法是单击并拖动滚动条,或单击滚动条区域 - 即无法使用 PgUp 或 PgDn 键、箭头键或空格键使
当我使用 HTML5 contenteditable 时,空格键在 button 元素中不起作用。但它在 div 元素中运行完美。我怎样才能让它工作?有人可以帮助我吗? 请在这里查看:https://
我是一名优秀的程序员,十分优秀!