سؤال

المشكلة لم تحل على الرغم من إجابة واحدة قبلت: نحن نعمل للحصول على يونان رمز للعمل.

المشكلة: لتغيير رمز من (1) إلى (2)

أنا أعرف الموضوع.كنت تريد أن تكون قادرة على تشغيل التعليمات البرمجية التالية داخل الشاشة

كود (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

قد ترغب في تحويل هذا شيل مثل (وهذا ربما يجب أن تكون أكثر قوة)

#!/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. في أي محطة أخرى (بما في ذلك تلك الموجودة في الشاشة دورات) يمكنك الآن القط الملفات (أو إعادة توجيه الإخراج من البرامج في /tmp/pbcopy.الأنابيب و سوف يظهر النص في الحافظة.

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 <>;

نصائح أخرى

هناك أسهل بكثير من حل فقط استخدام osascript كما وجدت في http://www.samsarin.com/blog/2008/10/18/copying-gnu-screen-buffer-to-leopard-clipboard/

في التعليقات ، أندرو 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 داخل الشاشة.التحسينات في هذا السيناريو هي موضع ترحيب:

حفظ هذا الكود كما باش النصي في مكان ما في المسار الخاص بك ، على سبيل المثال:~/بن/pbcopyScreen.باش

#!/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. تثبيت Macport باستخدام الملف DMG. النمر DMG

  2. إطلاق المحطة الجديدة و
    $ sudo vi /opt/local/etc/macports/sources.conf
    وأخيرا أولئك 2 خطوط يبقى فقط في المصادر.conf, لا أكثر:

    file:///Users/xxxxx/الموانئ
    رسينك://رسينك.macports.org/الإفراج/الموانئ/ [افتراضي]

  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/الموانئ
    $ portindex
    إنشاء برامج مؤشر /المستخدمين/keugaerg/الموانئ مضيفا ميناء sysutils/الشاشة

    Total number of ports parsed:   1 
    Ports successfully parsed:  1    
    Ports failed:           0
    
  6. $ sudo port install screen (قد يستغرق بعض الوقت كما تنزيل الشاشة و الأحسن من ذلك)

ثم يتم ذلك, فقط يجب أن إطلاق /opt/المحلية/بن/الشاشة .

ويبدو أن هذا ثابت في سنو ليوبارد نسخة غنو الشاشة على الرغم من أنها تحافظ على نفس رقم الإصدار 4.00.03 (FAU) 23-Oct-06.

بدلا من ذلك يمكنك تحديث الشاشة الإصدار 4.01:

git clone git://git.savannah.gnu.org/screen.git
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top