わかりました、これは厄介な答えですが、厄介な質問でもあるので、少なくとも一致します。で名前付きパイプを作成し、名前付きパイプmkfifo
からファイルを読み取り、それらをpbcopy
(またはxsel
、xclip
など) にパイプする無限ループをセットアップできます。
1. screen セッションではない端末で (これを 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.他の端末 (スクリーン セッションの端末を含む) で、ファイルを 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
/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 <>;