首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash shell可以“忽略”多余的复制粘贴文本吗?

问Bash shell可以“忽略”多余的复制粘贴文本吗?
EN

Unix & Linux用户
提问于 2016-02-06 18:18:58
回答 3查看 960关注 0票数 2

比方说,我在gui文本编辑器中有一个"Quick&Dirty“Perl脚本,并在运行Bash的终端窗口中启动Perl解释器。我可以将Perl脚本复制粘贴到终端&按CTRL来使用Perl执行它。Perl将解释并执行该脚本。

有时,脚本中有一个错误,这使得Perl打印了一个致命的错误并退出,但是剩下的复制粘贴文本被提供给试图执行这个错误的Bash shell;它要么失败(幸运的情况),要么执行但是会做一些不同的事情(不幸的情况)。

例:在Bash提示符下启动Perl,复制粘贴5行脚本:第1行和第2行很好,但是第3行使Perl退出异常,因此第4和第5行由Bash执行。

例如,我只使用Perl & Bash;许多其他交互工具(如Python、fdisk )和其他shell(例如zsh、csh )都会出现问题。

是否有任何方法通知shell,此文本是复制粘贴输入,可以忽略?

比如“如果比用户通常输入的速度更快,那么忽略”?

或者“如果进程完成,那么在读取下一个shell输入之前刷新输入缓冲区”?

[有些工具没有这个问题,例如MySQL cli不会在不正确的输入下退出.]

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2016-02-06 18:24:58

这不是一个答案,但也许这是一个可以接受的解决办法:

代码语言:javascript
复制
alias p='perl; echo hit control-d again; cat > /dev/null'

然后,如果您的perl脚本过早退出,您将无害地将其馀部分粘贴到/dev/null;如果perl脚本成功,您将看到友好的提醒并单击control退出cat捕获器。

票数 3
EN

Unix & Linux用户

发布于 2016-02-07 07:47:43

除了杰夫·夏勒的“解决方案/解决方案”之外,正确的解决方案似乎是让环境意识到来自发送方和接收方的复制粘贴,即所谓的“方括号粘贴模式”。

关于https://cirw.in/blog/bracketed-paste,这里有一个简短的片段来解释更多:

总结如下:

  1. 启用括号内的粘贴: printf“\e[?2004”
  2. 等待粘贴开始:您将看到\e[200~在STDIN上。
  3. 等待粘贴停止:你会看到\e[201~在STDIN上。
  4. 禁用括号内粘贴: printf“\e[?2004 l”

它还没有完全可用的巴什,所以我将接受杰夫夏勒的答案,这对我来说很好。

票数 1
EN

Unix & Linux用户

发布于 2016-02-08 01:00:29

与其粘贴到终端,不如从剪贴板读取命令。您可以使用X剪辑或xsel打印剪贴板内容(或者相反,将它们的输入写入剪贴板)。

代码语言:javascript
复制
xsel | perl           # automatic selection (click+drag, middle click)
xsel -b | perl        # manual selection (Ctrl+C, Ctrl+V)

这只有在终端中的shell能够访问X服务器的情况下才能工作。例如,它不能在不转发X11连接的SSH会话中工作。

在OSX上,使用pbpaste检索pasteboard内容。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/260395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档