好吧,这是一个古怪的答案,但这也是一个古怪的问题,所以至少它们匹配。您可以使用 创建一个命名管道mkfifo
,然后设置一个无限循环,从命名管道读取文件并将它们通过管道传输到pbcopy
(或xsel
、xclip
等)。
1.在不在屏幕会话中的终端中(仅运行一次):
/usr/bin/mkfifo /tmp/pbcopy.pipe
while true; do /bin/cat /tmp/pbcopy.pipe | /usr/bin/pbcopy; done
你可能想把它变成一个 shell 脚本,比如(这可能应该更健壮)
#!/bin/bash
if [[ -e /tmp/pbcopy.pipe ]]; then
echo "it looks like I am already running"
echo "remove /tmp/pbcopy.pipe if you are certain I am not"
exit 1
fi
while true; do
/bin/cat /tmp/pbcopy.pipe | /usr/bin/pbcopy
done
您可以命名pbcopy_server.sh
,使其可执行(chmod a+x pbcopy_server.sh
)并放在路径中的某个位置,这样您就可以nohup pbcopy_server.sh &
在第一次启动机器时说出它。
2.在任何其他终端(包括屏幕会话中的终端)中,您现在可以 cat 文件(或将程序的输出重定向到 /tmp/pbcopy.pipe,文本将出现在剪贴板中。
cat file > /tmp/pbcopy.pipe
df -h > /tmp/pbcopy.pipe
3.为了让它看起来像你在呼唤真实pbcopy
,你可以用一些东西来/tmp/pbcopy.pipe
为你做猫。
3a。使用一个zsh
函数:
function pbcopy() { cat > /tmp/pbcopy.pipe }
3b。或者创建一个名为的 Perl 脚本pbcopy
并将其放在您的PATH
than之前的目录中/usr/bin
:
#!/usr/bin/perl
use strict;
use warnings;
open my $out, ">", "/tmp/pbcopy.pipe"
or die "could not open pipe to pbcopy: $!\n";
print $out $_ while <>;