Невозможно иметь pbcopy -clipboard внутри экрана
-
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 в Screen?
Решение
Хорошо, это странный ответ, но это также странный вопрос, так что, по крайней мере, они совпадают. Вы можете создать именованный канал с помощью 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 & amp;
при первом запуске компьютера.
2. Теперь в любом другом терминале (в том числе в сеансах экрана) вы можете загружать файлы (или перенаправлять вывод программ в /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 / бен код>:
#!/usr/bin/perl
use strict;
use warnings;
open my $out, ">", "/tmp/pbcopy.pipe"
or die "could not open pipe to pbcopy: $!\n";
print $out Хорошо, это странный ответ, но это также странный вопрос, так что, по крайней мере, они совпадают. Вы можете создать именованный канал с помощью 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 & amp;
при первом запуске компьютера.
2. Теперь в любом другом терминале (в том числе в сеансах экрана) вы можете загружать файлы (или перенаправлять вывод программ в /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 / бен код>:
<*> while <>;
Другие советы
Существует гораздо более простое решение - просто использовать osascript, как можно найти по адресу http://www.samsarin.com/blog/2008/10/18/copying-gnu-screen-buffer-to-leopard-clipboard/
В комментариях Эндрю Уэйсон предлагает это решение для копирования буфера экрана:
Код в вашем .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
Вы можете установить более старую версию экрана Macport, которая, похоже, решает эту проблему, как указано в комментариях к этой статье:
ссылка на последний комментарий, объясняющий, как это сделать
Я попробовал себя, и теперь с pbcopy экран работает очень хорошо! : -)
Проверьте этот шаг:
<Ол>Установите Macport, используя его файл DMG. DMG Леопарда а>
Запустите новый терминал и
$ sudo vi /opt/local/etc/macports/sources.conf
наконец, эти 2 строки остаются только в sources.conf, не более:
Файл: /// Пользователи / ххххх / порты
rsync: //rsync.macports.org/release/ports/ [по умолчанию]
$ cd
(не создавайте каталог «screen», svn будет)
$ mkdir -p ports / sysutils /
$ cd ports / sysutils /
$ svn co -r 45745 http://svn.macports.org/repository/macports/trunk/dports/sysutils/screen
После проверки:
$ cd $ HOME / ports
$ portindex
Создание индекса программного обеспечения в / Users / keugaerg / ports
Добавление порта sysutils / screen
Total number of ports parsed: 1
Ports successfully parsed: 1
Ports failed: 0
экран установки $ sudo port
(загрузка экрана и его установка могут занять некоторое время)
Тогда все готово, просто запустите / opt / local / bin / screen.
Это, по-видимому, исправлено в версии GNU Screen Snow Leopard, даже несмотря на то, что он сохраняет тот же номер версии 4.00.03 (FAU) 23 октября 2006 года.
В качестве альтернативы вы можете обновить до версии экрана 4.01:
git clone git://git.savannah.gnu.org/screen.git