3

問題 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をどのように使用できますか?

4

4 に答える 4

6

わかりました、これは厄介な答えですが、厄介な質問でもあるので、少なくとも一致します。で名前付きパイプを作成し、名前付きパイプmkfifoからファイルを読み取り、それらをpbcopy(またはxselxclipなど) にパイプする無限ループをセットアップできます。

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 <>;
于 2009-05-03T04:40:42.790 に答える
1

http://www.samsarin.com/blog/2008/10/18/copying-gnu-screen-buffer-to-leopard-clipboard/にあるように、osascriptを使用するだけのはるかに簡単なソリューションがあります

コメントでは、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
于 2009-05-29T18:16:53.943 に答える
0

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

私は自分で試してみましたが、 screen は pbcopy で非常にうまく動作します! :-)

そのステップを確認してください:

  1. DMG ファイルを使用して Macport をインストールします。ヒョウのダメージ

  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/
    (「スクリーン」ディレクトリを作成しないでください。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 install screen (画面のダウンロードとビルドに時間がかかる場合があります)

/opt/local/bin/screen を起動するだけです。

于 2009-05-14T21:29:55.837 に答える
0

これは、GNU Screen の Snow Leopard のバージョンでは修正されているようですが、同じバージョン番号 4.00.03 (FAU) 23-Oct-06 を保持しています。

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

git clone git://git.savannah.gnu.org/screen.git
于 2011-01-16T08:39:11.193 に答える