Question

Problème Non résolu même si une réponse a été acceptée: nous travaillons pour que le code de Jonah fonctionne.

Problème: pour modifier le code de (1) en (2)

Je connais le thread . Je veux pouvoir exécuter le code suivant dans Screen

Code (1)

cat ~/.vimrc | pbcopy                   (1)

Code (2)

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

Ma tentative de résolution du problème: mettre le code suivant dans .zshrc

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

je reçois

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

Comment utiliser pbcopy dans Screen?

Était-ce utile?

La solution

Bien, c’est une réponse délicate, mais c’est aussi une question délicate, alors au moins ils correspondent. Vous pouvez créer un canal nommé avec mkfifo , puis configurez une boucle infinie qui lit les fichiers du canal nommé et les redirige vers pbcopy (ou xsel , xclip , etc.).

1. Dans un terminal qui N'EST PAS dans une session d'écran (ne l'exécuter qu'une seule fois):

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

Vous pouvez vouloir transformer ceci en un script shell comme celui-ci (cela devrait probablement être plus robuste)

#!/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 vous pouvez nommer pbcopy_server.sh , rendre exécutable ( chmod a + x pbcopy_server.sh ) et placer quelque part dans votre chemin, afin que vous puissiez dire nohup pbcopy_server.sh & lorsque vous démarrez votre ordinateur pour la première fois.

2. Dans tout autre terminal (y compris ceux des sessions écran), vous pouvez désormais lire les fichiers cat (ou rediriger la sortie des programmes dans /tmp/pbcopy.pipe et le texte apparaît dans le Presse-papiers.

cat file > /tmp/pbcopy.pipe

df -h > /tmp/pbcopy.pipe

3. Pour donner l'impression que vous appelez le véritable pbcopy , vous pouvez utiliser quelque chose pour modifier l'attitude de /tmp/pbcopy.pipe. pour vous.

3a. utiliser une fonction zsh :

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

3b. Ou créez un script Perl nommé pbcopy et placez-le dans un répertoire situé auparavant dans votre PATH par rapport à / 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 

Bien, c’est une réponse délicate, mais c’est aussi une question délicate, alors au moins ils correspondent. Vous pouvez créer un canal nommé avec mkfifo , puis configurez une boucle infinie qui lit les fichiers du canal nommé et les redirige vers pbcopy (ou xsel , xclip , etc.).

1. Dans un terminal qui N'EST PAS dans une session d'écran (ne l'exécuter qu'une seule fois):

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

Vous pouvez vouloir transformer ceci en un script shell comme celui-ci (cela devrait probablement être plus robuste)

#!/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 vous pouvez nommer pbcopy_server.sh , rendre exécutable ( chmod a + x pbcopy_server.sh ) et placer quelque part dans votre chemin, afin que vous puissiez dire nohup pbcopy_server.sh & lorsque vous démarrez votre ordinateur pour la première fois.

2. Dans tout autre terminal (y compris ceux des sessions écran), vous pouvez désormais lire les fichiers cat (ou rediriger la sortie des programmes dans /tmp/pbcopy.pipe et le texte apparaît dans le Presse-papiers.

cat file > /tmp/pbcopy.pipe

df -h > /tmp/pbcopy.pipe

3. Pour donner l'impression que vous appelez le véritable pbcopy , vous pouvez utiliser quelque chose pour modifier l'attitude de /tmp/pbcopy.pipe. pour vous.

3a. utiliser une fonction zsh :

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

3b. Ou créez un script Perl nommé pbcopy et placez-le dans un répertoire situé auparavant dans votre PATH par rapport à / usr / bin :

<*> while <>;

Autres conseils

Il existe une solution beaucoup plus simple qui consiste à utiliser osascript, à l'adresse http://www.samsarin.com/blog/2008/10/18/copying-gnu-screen-buffer-to-leopard-clipboard/

Dans les commentaires, Andrew Wason fournit cette solution pour copier le tampon d'écran:

Code dans votre .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'"

Également en utilisant osascript, voici un script bash émulant le comportement de pbcopy à l’écran. Les améliorations de ce script sont les bienvenues:

Enregistrez ce code en tant que script bash quelque part dans votre chemin, par exemple: ~ / 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

Vous pouvez installer une ancienne version de l'écran de Macport qui semble résoudre ce problème, comme indiqué dans les commentaires de cet article:
link au dernier commentaire expliquant comment faire

Je me suis essayé et l'écran fonctionne très bien maintenant avec pbcopy! : -)

Vérifiez cette étape:

  1. Installez Macport à l'aide de son fichier DMG. Le DMG de Leopard

  2. Lancez un nouveau terminal et
    $ sudo vi /opt/local/etc/macports/sources.conf
    enfin ces 2 lignes ne restent que dans sources.conf, pas plus:

    fichier: /// Utilisateurs / xxxxx / ports
    rsync: //rsync.macports.org/release/ports/ [défaut]

  3. $ cd
    $ mkdir -p ports / sysutils /
    (ne créez pas de répertoire "screen", svn will)

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

  5. Une fois que vous avez vérifié:

    $ cd $ HOME / ports
        $ portindex
        Création d'un index logiciel dans / Users / keugaerg / ports     Ajout de port sysutils / screen

    Total number of ports parsed:   1 
    Ports successfully parsed:  1    
    Ports failed:           0
    
  6. Écran d'installation du port $ sudo (cela peut prendre un certain temps en tant que téléchargement de l’écran et de l’afficher)

Ensuite, il suffit de lancer / opt / local / bin / screen.

Cela semble être résolu dans la version de GNU Screen de Snow Leopard même si elle conserve le même numéro de version 4.00.03 (FAU) le 23 octobre 2006.

Vous pouvez également mettre à jour l'écran avec la version 4.01:

git clone git://git.savannah.gnu.org/screen.git
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top