Domanda

Problema Non risolto sebbene sia stata accettata una risposta: stiamo lavorando per far funzionare il codice di Jonah.

Problema: per modificare il codice da (1) a (2)

Conosco la thread . Voglio essere in grado di eseguire il seguente codice all'interno dello schermo

Codice (1)

cat ~/.vimrc | pbcopy                   (1)

Codice (2)

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

Il mio tentativo di risolvere il problema: per mettere il seguente codice in .zshrc

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

Ottengo

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

Come puoi usare pbcopy all'interno dello schermo?

È stato utile?

Soluzione

Va ??bene, questa è una risposta sbagliata, ma è anche una domanda sbagliata, quindi almeno corrispondono. Puoi creare una pipe denominata con mkfifo , e quindi impostare un ciclo infinito che legge i file dalla pipe denominata e li instrada in pbcopy (o xsel , xclip , ecc.).

1. In un terminale che NON si trova in una sessione schermo (eseguirlo una sola volta):

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

Potresti volerlo trasformare in uno script shell come (probabilmente dovrebbe essere più 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

che puoi nominare pbcopy_server.sh , rendi eseguibile ( chmod a + x pbcopy_server.sh ) e mettilo da qualche parte nel tuo percorso, così puoi dire nohup pbcopy_server.sh & amp; quando avvii la macchina per la prima volta.

2. In qualsiasi altro terminale (inclusi quelli nelle sessioni dello schermo) ora puoi cat file (o reindirizzare l'output dei programmi in /tmp/pbcopy.pipe e il testo apparirà negli appunti.

cat file > /tmp/pbcopy.pipe

df -h > /tmp/pbcopy.pipe

3. Per far sembrare che tu stia chiamando il vero pbcopy puoi usare qualcosa per fare il cat a /tmp/pbcopy.pipe per te.

3a. Utilizza una funzione zsh :

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

3b. Oppure crea uno script Perl chiamato pbcopy e inseriscilo in una directory precedente nel tuo PATH rispetto a / 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 

Va ??bene, questa è una risposta sbagliata, ma è anche una domanda sbagliata, quindi almeno corrispondono. Puoi creare una pipe denominata con mkfifo , e quindi impostare un ciclo infinito che legge i file dalla pipe denominata e li instrada in pbcopy (o xsel , xclip , ecc.).

1. In un terminale che NON si trova in una sessione schermo (eseguirlo una sola volta):

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

Potresti volerlo trasformare in uno script shell come (probabilmente dovrebbe essere più 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

che puoi nominare pbcopy_server.sh , rendi eseguibile ( chmod a + x pbcopy_server.sh ) e mettilo da qualche parte nel tuo percorso, così puoi dire nohup pbcopy_server.sh & amp; quando avvii la macchina per la prima volta.

2. In qualsiasi altro terminale (inclusi quelli nelle sessioni dello schermo) ora puoi cat file (o reindirizzare l'output dei programmi in /tmp/pbcopy.pipe e il testo apparirà negli appunti.

cat file > /tmp/pbcopy.pipe

df -h > /tmp/pbcopy.pipe

3. Per far sembrare che tu stia chiamando il vero pbcopy puoi usare qualcosa per fare il cat a /tmp/pbcopy.pipe per te.

3a. Utilizza una funzione zsh :

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

3b. Oppure crea uno script Perl chiamato pbcopy e inseriscilo in una directory precedente nel tuo PATH rispetto a / usr / bin :

<*> while <>;

Altri suggerimenti

Esiste una soluzione molto più semplice per usare solo JavaScript come si trova in http://www.samsarin.com/blog/2008/10/18/copying-gnu-screen-buffer-to-leopard-clipboard/

Nei commenti, Andrew Wason fornisce questa soluzione per copiare il buffer dello schermo:

Codice nel tuo .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'"

Usando anche JavaScript, ecco uno script bash che emula il comportamento di pbcopy all'interno dello schermo. I miglioramenti a questo script sono benvenuti:

Salva questo codice come script bash da qualche parte nel tuo percorso, ad esempio: ~ / 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

È possibile installare una versione precedente dello schermo di Macport che sembra risolvere questo problema, come indicato nei commenti di questo articolo:
link all'ultimo commento che spiega come fare

Ho provato me stesso e lo schermo funziona molto bene ora con pbcopy! : -)

Controlla quel passaggio:

  1. Installa Macport usando il suo file DMG. DMG di Leopard

  2. Avvia un nuovo terminale e
    $ sudo vi /opt/local/etc/macports/sources.conf
    infine quelle 2 righe rimangono solo in sources.conf, non di più:

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

  3. $ cd
    $ mkdir -p ports / sysutils /
    (non creare una directory " screen " svn sarà)

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

  5. Una volta estratto:

    $ cd $ HOME / porte
        $ portindex
        Creazione dell'indice software in / Users / keugaerg / doors     Aggiunta di sysutils / schermo delle porte

    Total number of ports parsed:   1 
    Ports successfully parsed:  1    
    Ports failed:           0
    
  6. $ sudo port install screen (potrebbe volerci un po 'come scaricare lo schermo e crearlo)

Quindi, basta avviare / opt / local / bin / screen.

Questo sembra corretto nella versione di GNU Screen di Snow Leopard anche se mantiene lo stesso numero di versione 4.00.03 (FAU) 23-ott-06.

In alternativa puoi aggiornare alla versione 4.01 dello schermo:

git clone git://git.savannah.gnu.org/screen.git
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top