Impossible d'avoir pbcopy -clipboard dans l'écran
-
03-07-2019 - |
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?
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:
-
Installez Macport à l'aide de son fichier DMG. Le DMG de Leopard
-
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] -
$ cd
(ne créez pas de répertoire "screen", svn will)
$ mkdir -p ports / sysutils / -
$ cd ports / sysutils /
$ svn co -r 45745 http://svn.macports.org/repository/macports/trunk/dports/sysutils/screen -
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 / screenTotal number of ports parsed: 1 Ports successfully parsed: 1 Ports failed: 0
-
É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