3

问题尽管接受了一个答案,但仍未解决:我们正在努力让 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.在不在屏幕会话中的终端中(仅运行一次):

/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并将其放在您的PATHthan之前的目录中/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,这是一个 bash 脚本,它在屏幕中模拟 pbcopy 的行为。欢迎对此脚本进行改进:

将此代码保存为路径中某处的 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 屏幕,这似乎可以解决此问题,如本文评论中所述:
链接到最后一条评论,解释如何做

我已经尝试过自己并且屏幕现在使用 pbcopy 工作得很好!:-)

检查该步骤:

  1. 使用其 DMG 文件安装 Macport。豹的DMG

  2. 启动一个新的终端
    $ sudo vi /opt/local/etc/macports/sources.conf
    最后这两行只保留在 sources.conf 中,不再有:

    file:///Users/xxxxx/ports
    rsync://rsync.macports.org/release/ports/ [默认]

  3. $ cd
    $ mkdir -p ports/sysutils/
    (不要创建“screen”目录,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

这似乎在 Snow Leopard 的 GNU Screen 版本中得到了修复,即使它保持相同的版本号 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 回答