غير قادر على أن pbcopy -الحافظة داخل الشاشة
-
03-07-2019 - |
سؤال
المشكلة لم تحل على الرغم من إجابة واحدة قبلت: نحن نعمل للحصول على يونان رمز للعمل.
المشكلة: لتغيير رمز من (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 !:-)
تحقق من هذه الخطوة:
تثبيت Macport باستخدام الملف DMG. النمر DMG
إطلاق المحطة الجديدة و
$ sudo vi /opt/local/etc/macports/sources.conf
وأخيرا أولئك 2 خطوط يبقى فقط في المصادر.conf, لا أكثر:file:///Users/xxxxx/الموانئ
رسينك://رسينك.macports.org/الإفراج/الموانئ/ [افتراضي]$ cd
(لا إنشاء "الشاشة" دليل svn سوف)
$ mkdir -p ports/sysutils/$ cd ports/sysutils/
$ svn co -r 45745 http://svn.macports.org/repository/macports/trunk/dports/sysutils/screenبمجرد التحقق من:
cd $ $HOME/الموانئ
$ portindex
إنشاء برامج مؤشر /المستخدمين/keugaerg/الموانئ مضيفا ميناء sysutils/الشاشةTotal number of ports parsed: 1 Ports successfully parsed: 1 Ports failed: 0
$ sudo port install screen
(قد يستغرق بعض الوقت كما تنزيل الشاشة و الأحسن من ذلك)
ثم يتم ذلك, فقط يجب أن إطلاق /opt/المحلية/بن/الشاشة .
ويبدو أن هذا ثابت في سنو ليوبارد نسخة غنو الشاشة على الرغم من أنها تحافظ على نفس رقم الإصدار 4.00.03 (FAU) 23-Oct-06.
بدلا من ذلك يمكنك تحديث الشاشة الإصدار 4.01:
git clone git://git.savannah.gnu.org/screen.git