質問

1 つの回答が受け入れられましたが、問題は解決されませんでした: 私たちは Jonah のコードを動作させるために取り組んでいます。

問題: (1)のコードを(2)に変更するには

私は知っています . 。Screen内で次のコードを実行できるようにしたい

コード(1)

cat ~/.vimrc | pbcopy                   (1)

コード(2)

cat ~/.vimrc > /tmp/pbcopy.pipe         (2)

問題を解決しようとする私の試み:次のコードを .zshrc に置きます

function pbcopy() { "(cat \"$1\")"  > /tmp/pbcopy.pipe } 

分かりました

cat masi | pbcopy          
pbcopy: command not found: (cat "")
cat: masi: No such file or directory

Screen 内で pbcopy を使用するにはどうすればよいですか?

役に立ちましたか?

解決

さて、これは厄介な答えですが、それはまた厄介な質問なので、少なくとも一致します。 mkfifo を使用して名前付きパイプを作成できます。次に、名前付きパイプからファイルを読み取り、 pbcopy (または xsel xclip など)にパイプする無限ループを設定します。

1。スクリーンセッションにない端末で(これを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。または pbcopy という名前のPerlスクリプトを作成し、 / usr /よりも PATH の前のディレクトリに配置します。ビン

#!/usr/bin/perl

use strict;
use warnings;

open my $out, ">", "/tmp/pbcopy.pipe"
   or die "could not open pipe to pbcopy: $!\n";

print $out 

さて、これは厄介な答えですが、それはまた厄介な質問なので、少なくとも一致します。 mkfifo を使用して名前付きパイプを作成できます。次に、名前付きパイプからファイルを読み取り、 pbcopy (または xsel xclip など)にパイプする無限ループを設定します。

1。スクリーンセッションにない端末で(これを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。または pbcopy という名前のPerlスクリプトを作成し、 / usr /よりも PATH の前のディレクトリに配置します。ビン

<*> while <>;

他のヒント

http://www.samsarin.com/blog/2008/10/18/copying-gnu-screen-buffer-to-leopard-clipboard/

コメントでは、Andrew Wasonが画面バッファをコピーするためのこのソリューションを提供しています:

.screenrcのコード

# binds C-a b to copy the contents of your last screen copy to the MacOSX pasteboard
bind b eval "writebuf /tmp/screen-pbcopy" "exec /usr/bin/osascript -e 'tell application \"System Events\"' -e 'set the clipboard to (read posix file \"/tmp/screen-pbcopy\" as text)' -e 'end tell'"

また、osascriptを使用して、画面内のpbcopyの動作をエミュレートするbashスクリプトを次に示します。このスクリプトの改善は大歓迎です:

このコードをパスのどこかにbashスクリプトとして保存します。例:〜/ bin / pbcopyScreen.bash

#!/bin/bash

# saves all standard input to a file
cat > /tmp/screen_pbcopy_kludge_buffer

# uses osascript to set the MacOSX pastebaord to the contents of the file
/usr/bin/osascript -e 'tell application "System Events"' -e 'set the clipboard to (read posix file "/tmp/screen_pbcopy_kludge_buffer" as text)' -e 'end tell'

rm /tmp/screen_pbcopy_kludge_buffer

この記事のコメントに記載されているように、この問題を解決すると思われる古いバージョンのMacportの画面をインストールできます。
リンク方法を説明する最後のコメントへ

私は自分で試してみましたが、pbcopyでスクリーンは非常にうまく動作します:-)

そのステップを確認します:

  1. DMGファイルを使用してMacportをインストールします。 LeopardのDMG

  2. 新しいターミナルを起動し、
    $ sudo vi /opt/local/etc/macports/sources.conf
    最後に、これらの2行はsources.confにのみ残り、それ以上はありません。

    file:/// Users / xxxxx / ports
    rsync://rsync.macports.org/release/ports/ [デフォルト]

  3. $ cd
    $ mkdir -p ports / sysutils /
    (&quot; screen&quot;ディレクトリを作成しないでください、svnは作成します)

  4. $ cd ports / sysutils /
    $ svn co -r 45745 http://svn.macports.org/repository/macports/trunk/dports/sysutils/screen

  5. 一度チェックアウト:

    $ cd $ HOME / ports
        $ portindex
        / Users / keugaerg / portsでソフトウェアインデックスを作成する     ポートsysutils / screenの追加

    Total number of ports parsed:   1 
    Ports successfully parsed:  1    
    Ports failed:           0
    
  6. $ sudo portインストール画面 (画面をダウンロードして起動するのに時間がかかる場合があります)

完了したら、/ opt / local / bin / screenを起動するだけです。

この問題は、Snow Leopard のバージョンの GNU Screen では修正されているようですが、バージョン番号は 4.00.03 (FAU) 2006 年 10 月 23 日のままです。

あるいは、Screen バージョン 4.01 に更新することもできます。

git clone git://git.savannah.gnu.org/screen.git
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top