![从“剪贴板”中删除尾随新行以防止在终端上执行?](https://linux22.com/image/51546/%E4%BB%8E%E2%80%9C%E5%89%AA%E8%B4%B4%E6%9D%BF%E2%80%9D%E4%B8%AD%E5%88%A0%E9%99%A4%E5%B0%BE%E9%9A%8F%E6%96%B0%E8%A1%8C%E4%BB%A5%E9%98%B2%E6%AD%A2%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%8A%E6%89%A7%E8%A1%8C%EF%BC%9F.png)
有没有办法通过某种过滤器运行您复制到“剪贴板”的任何内容?理想情况下,从您复制的内容中删除尾随换行符,以便它不会在终端中自动运行?
这就是我复制相关测试时的样子,有时我会忘记这是一个新行。
答案1
良好的现代终端支持括号内的粘贴:当您使用终端的粘贴命令时,它会在剪贴板内容周围发送特殊的转义序列。如果您的 shell 支持括号粘贴,它将按原样粘贴剪贴板内容,包括任何控制字符,特别是尾随换行符不会触发命令的执行。
Zsh ≥5.1 支持括号粘贴并默认打开。旧版本可以被教导。 Bash ≥4.4 支持括号粘贴,如果添加set enable-bracketed-paste on
到~/.inputrc
。
如果您的终端或 shell 不支持括号粘贴,您可以定义一个 shell 函数,该函数在粘贴时不带尾随换行符。
在 zsh 中,以下命令调用剪贴板的内容,减去尾随换行符,并将其显示出来进行编辑(即使有多行):
print -z -- "`xsel -b`"
在 bash 中,您可以将剪贴板的内容减去尾随换行符推送到历史堆栈。之后,按Up调出命令进行编辑。
history -s -- "`xsel -b`"
答案2
是的,用于cat
粘贴到文件中,做任何你喜欢的事情,然后执行它。
对于本例:
$ cat > tmp
[paste][Ctrl+D]
$ tr -d '\n' <tmp | xclip # this remove all "new line" characters
# and copy back to clipboard
答案3
自版本 0.13(2016-09 发布)以来,xclip
似乎有一个未记录的选项-r
,它完全满足了需要:从文本中删除最后一个换行符。看https://github.com/astrand/xclip/issues/7。至少它在 Ubuntu 22.04 上对我有用。
答案4
我意识到我们可以一行完成,灵感来自 @RSFalcon7 答案
通过使用xsel
, 复制到主要选择
cat | tr -d '\n' | xsel
[paste], 2 times[Ctrl-D]