管道输入 xclip 时没有新行

管道输入 xclip 时没有新行

我可以做些什么,以便每当我将某些内容输入其中时,xclip末尾不会包含新行?
作为一种解决方法,我正在使用echo -n $(CMD_TO_COPY) | xclip,但每次我想复制某些内容时都必须输入所有这些内容,这有点烦人。

答案1

根据手册页,xclip有一个-rmlastnl( -r) 选项可以完全满足您的要求:

echo hello | xclip -i -r

答案2

尽管xclip由于版本 0.13 确实有一个选项可以删除尾随换行符,正如 larsks 已经指出的那样,您也可以始终定义一个函数来执行您想要的处理,例如:

clipboard() { printf %s "$(cat -- "$@")" | xclip -sel c; }
clipboard() { printf %s "$(cat -- "$@")" | xsel -b; }

(这里,命令替换删除全部尾随换行符,在某些 shell 中bash,包括所有 NUL 字符)。

或者只删除一个尾随换行符,如下xclip -r所示:

clipboard() { cat -- "$@" | perl -pe 's/\n$// if eof' | xclip -sel c; }

并用作:

cmd | clipboard
clipboard <<< "$var"
clipboard some-file and-some-other

任何状况之下,使用echo, 或者不带引号的命令替换就像你的echo -n $(CMD_TO_COPY)方法不正确。

相关内容