Pregunta

Problema no resuelto aunque se aceptó una respuesta: estamos trabajando para que el código de Jonah funcione.

Problema: para cambiar el código de (1) a (2)

Conozco el hilo . Quiero poder ejecutar el siguiente código dentro de la pantalla

Código (1)

cat ~/.vimrc | pbcopy                   (1)

Código (2)

cat ~/.vimrc > /tmp/pbcopy.pipe         (2)

Mi intento de resolver el problema: para poner el siguiente código en .zshrc

function pbcopy() { "(cat \"$1\")"  > /tmp/pbcopy.pipe } 

me sale

cat masi | pbcopy          
pbcopy: command not found: (cat "")
cat: masi: No such file or directory

¿Cómo puedes usar pbcopy dentro de la pantalla?

¿Fue útil?

Solución

Está bien, esta es una respuesta jodida, pero también es una pregunta jodida, por lo menos al menos coinciden. Puede crear una tubería con nombre con mkfifo , y luego configure un bucle infinito que lee los archivos de la canalización con nombre y los canaliza a pbcopy (o xsel , xclip , etc.).

1. en un terminal que NO está en una sesión de pantalla (ejecute esto solo una vez):

/usr/bin/mkfifo /tmp/pbcopy.pipe
while true; do /bin/cat /tmp/pbcopy.pipe | /usr/bin/pbcopy; done

Es posible que desee convertir esto en un script de shell como (esto probablemente debería ser más robusto)

#!/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

que puede nombrar pbcopy_server.sh , hacer ejecutable ( chmod a + x pbcopy_server.sh ) y colocarlo en algún lugar de su ruta, para que pueda decir nohup pbcopy_server.sh & amp; cuando inicia su máquina por primera vez.

2. En cualquier otro terminal (incluidos los que están en sesiones de pantalla), ahora puede catar archivos (o redirigir la salida de programas a /tmp/pbcopy.pipe y el texto aparecerá en el portapapeles.

cat file > /tmp/pbcopy.pipe

df -h > /tmp/pbcopy.pipe

3. Para hacer que parezca que estás llamando al pbcopy real , puedes usar algo para hacer la gestión a /tmp/pbcopy.pipe para ti.

3a. Use una función zsh :

function pbcopy() { cat > /tmp/pbcopy.pipe }

3b. O cree una secuencia de comandos Perl llamada pbcopy y colóquela en un directorio de su PATH antes de / 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 

Está bien, esta es una respuesta jodida, pero también es una pregunta jodida, por lo menos al menos coinciden. Puede crear una tubería con nombre con mkfifo , y luego configure un bucle infinito que lee los archivos de la canalización con nombre y los canaliza a pbcopy (o xsel , xclip , etc.).

1. en un terminal que NO está en una sesión de pantalla (ejecute esto solo una vez):

/usr/bin/mkfifo /tmp/pbcopy.pipe
while true; do /bin/cat /tmp/pbcopy.pipe | /usr/bin/pbcopy; done

Es posible que desee convertir esto en un script de shell como (esto probablemente debería ser más robusto)

#!/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

que puede nombrar pbcopy_server.sh , hacer ejecutable ( chmod a + x pbcopy_server.sh ) y colocarlo en algún lugar de su ruta, para que pueda decir nohup pbcopy_server.sh & amp; cuando inicia su máquina por primera vez.

2. En cualquier otro terminal (incluidos los que están en sesiones de pantalla), ahora puede catar archivos (o redirigir la salida de programas a /tmp/pbcopy.pipe y el texto aparecerá en el portapapeles.

cat file > /tmp/pbcopy.pipe

df -h > /tmp/pbcopy.pipe

3. Para hacer que parezca que estás llamando al pbcopy real , puedes usar algo para hacer la gestión a /tmp/pbcopy.pipe para ti.

3a. Use una función zsh :

function pbcopy() { cat > /tmp/pbcopy.pipe }

3b. O cree una secuencia de comandos Perl llamada pbcopy y colóquela en un directorio de su PATH antes de / usr / bin :

<*> while <>;

Otros consejos

Hay una solución mucho más fácil para usar el osascript que se encuentra en http://www.samsarin.com/blog/2008/10/18/copying-gnu-screen-buffer-to-leopard-clipboard/

En los comentarios, Andrew Wason proporciona esta solución para copiar el búfer de pantalla:

Código en su .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'"

También utilizando osascript, aquí hay un script de bash que emula el comportamiento de pbcopy dentro de la pantalla. Las mejoras a este script son bienvenidas:

Guarde este código como un script bash en algún lugar de su ruta, por ejemplo: ~ / 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

Puede instalar una versión anterior de la pantalla de Macport que parece resolver este problema, como se indica en los comentarios de este artículo:
enlace hasta el último comentario que explica cómo hacerlo

¡Lo he probado y la pantalla funciona muy bien ahora con pbcopy! :-)

Comprueba ese paso:

  1. Instala Macport usando su archivo DMG. DMG de Leopard

  2. Inicia una nueva Terminal y
    $ sudo vi /opt/local/etc/macports/sources.conf
    finalmente esas 2 líneas solo permanecen en sources.conf, no más:

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

  3. $ cd
    $ mkdir -p ports / sysutils /
    (no cree un directorio " screen " svn will)

  4. $ cd ports / sysutils /
    $ svn co -r 45745 http://svn.macports.org/repository/macports/trunk/dports/sysutils/screen

  5. Una vez que se haya retirado:

    $ cd $ HOME / ports
        $ portindex
        Creación de índice de software en / Users / keugaerg / ports     Añadiendo sysutils de puerto / pantalla

    Total number of ports parsed:   1 
    Ports successfully parsed:  1    
    Ports failed:           0
    
  6. pantalla de instalación del puerto $ sudo (puede tardar un rato en descargar la pantalla y crearla)

Entonces, listo, solo tienes que iniciar / opt / local / bin / screen.

Esto parece haberse solucionado en la versión de Snow Leopard de GNU Screen, aunque mantiene el mismo número de versión 4.00.03 (FAU) del 23 de octubre al 06.

Alternativamente, puedes actualizar a la versión de pantalla 4.01:

git clone git://git.savannah.gnu.org/screen.git
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top