问题尽管有一个答案被接受但未解决:我们正努力让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
你如何在屏幕内使用pbcopy?
好吧,这是一个棘手的答案,但它也是一个棘手的问题,所以至少他们匹配.您可以创建一个命名管道mkfifo
,然后建立一个无限循环读取命名管道文件和管道他们pbcopy
(或xsel
,xclip
等等).
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
,并把它放在一个目录早些时候在你的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 <>;