Хорошо, это неправильный ответ, но это также странный вопрос, так что, по крайней мере, они совпадают. Вы можете создать именованный канал с помощью mkfifo
, а затем настроить бесконечный цикл, который считывает файлы из именованного канала и направляет их в pbcopy
(или xsel
, xclip
и т. Д.) .
1. В терминале, который НЕ участвует в сеансе экрана (выполните это только один раз):
/usr/bin/mkfifo /tmp/pbcopy.pipe
while true; do /bin/cat /tmp/pbcopy.pipe | /usr/bin/pbcopy; done
Возможно, вы захотите превратить это в сценарий оболочки (это, вероятно, должно быть более надежным)
#!/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. В любом другом терминале (в том числе в сеансах экрана) теперь вы можете загружать файлы (или перенаправлять вывод программ в /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
, чем /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 <>;