在nano
v8.0 中,有一个选项可以将选择发送到 X 剪贴板nanorc
:
"{execute}|xsel -ib{enter}{undo}"
效果非常好。
我尝试使用xclip
实用程序代替:
"{execute}|xclip -sel c{enter}{undo}"
结果是无限执行[ Executing... ]
,在命中之前对交互不敏感^C
。取消后看起来复制完成了,没有错误,但是卡住了怎么办?为什么会发生这种情况?有解决办法吗?
我使用的是 Kubuntu 20.04.6 LTS(Focal Fossa)。
为什么?
从这个答案:
在你的情况下,原件
xclip
死了,但它的孩子幸存下来,声称它有一个选择,并为想要粘贴的未来客户提供服务。通常(例如,在 的情况下printf foo | xclip -sel c
)您不会注意到孩子,因为它位于后台。其
xsel
机制是一样的:一个孩子在后台生存。不同之处在于子进程
xsel
很聪明,会将其 stdin 和 stdout 重定向到/dev/null
,将其 stderr 重定向到日志。孩子xclip
没那么聪明,它一直“使用”从原始继承的标准流xclip
;它并没有真正使用它们,只是让它们保持打开状态。处于等待调用命令的输出的
[ Executing... ]
状态。nano
该命令是nano
某个管道的写入者和读取者。如果任何进程保持管道打开以进行写入,nano
则将继续等待进一步的输出。如果xclip
儿童保持管道打开,从而阻止nano
继续*。以防xsel
儿童不保持管道畅通。您的问题与此非常相似:
ssh
command does not Terminate。*琐事:从其他地方复制,即让其他进程声称它有一个选择,将使子进程
xclip
退出;这将解锁nano
。使固定
我认为,在不首先影响父级的情况下强制子级关闭其继承的标准流通常并不容易。幸运的是,您实际上并不需要
nano
捕获任何输出xclip
(无论是来自父级还是子级)。将父级的输出重定向xclip
到/dev/null
足以解决问题。在我的测试中,标准 shell 语法有效: