¿Es posible canalizar hacia / desde el portapapeles en Bash?
Si se trata de una tubería desde / hacia un dispositivo o mediante una aplicación auxiliar, no puedo encontrar nada.
Por ejemplo, si /dev/clip
se tratara de un dispositivo vinculado al portapapeles, podríamos hacer:
cat /dev/clip # Dump the contents of the clipboard
cat foo > /dev/clip # Dump the contents of "foo" into the clipboard
:%y+
en vim, que es vim-speak para "tirar (copiar) todas las líneas en el registro '+' (elPRIMARY
portapapeles X )". Puede reemplazar%
con un rango si desea ser específico. Pero hay tres advertencias: 1. Ahora, debe guardar el texto en un archivo antes de poder copiarlo. Esto está en contraste con elxclip
comando mencionado en las respuestas. 2. Si aún no sabes cómo vim, esto puede ser tedioso. 3. Solo puede hacer esto si cierta característica está habilitada al compilar vim. Si instala GVim, debe habilitarse de manera predeterminada tanto en la GUI como en las instancias de terminal de vim.xclip
. Su respuesta funcionó como un encanto.:%y+
pero está bien, ¡tienes todas las bases cubiertas! BuenoRespuestas:
Hay una gran cantidad de portapapeles con los que podrías estar lidiando. Supongo que probablemente eres un usuario de Linux que quiere poner cosas en el portapapeles primario de X Windows. Por lo general, el portapapeles con el que desea hablar tiene una utilidad que le permite hablar con él.
En el caso de X, hay
xclip
(y otros).xclip -selection c
enviará datos al portapapeles con el que funciona Ctrl + C, Ctrl + Ven la mayoría de las aplicaciones.Si estás en Mac OS X, hay
pbcopy
. p.ejcat example.txt | pbcopy
Si estás en Linux modo terminal (NO x) y luego mirar hacia
gpm
o pantalla que tiene un portapapeles. Prueba elscreen
comandoreadreg
.En Windows 10+ o cygwin, use
/dev/clipboard
oclip
.fuente
/dev/clipboard
también funciona para Msys / MinGW bash shellsxclip -selection c
enviará datos al portapapeles que funciona con ^ C, ^ V en la mayoría de las aplicacionesclip
la siguiente manera:dir | clip
/dev/clipboard
, y obliga a instalar xclip o gpm, que falta por defecto al menos en Kubuntu (supongo que en la mayoría de las otras distribuciones también) .Asegúrate de que lo estás utilizando; de lo
alias xclip="xclip -selection c"
contrario, no puedes usar Ctrl+ vpara pegarlo en un lugar diferente.Ctrl+v
=== test
fuente
xclip -selection clipboard -o
alias pbcopy="xclip -selection c"
alias pbpaste="xclip -selection clipboard -o"
Espero que ayude.xclip
no agrega una nueva línea,echo
es. Tratarprintf test | xclip -i -selection clipboard
. (printf
no agrega una nueva línea a menos que escriba'test\n'
)echo -n
lugar deprintf
.Instalar en pc
Si no tiene acceso a
apt-get
nipacman
, nidnf
, las fuentes están disponibles en sourceforge .Preparar
Golpetazo
En
~/.bash_aliases
, agregue:No olvide cargar su nueva configuración utilizando
. ~/.bash_aliases
o reiniciando su perfil.Pez
En
~/.config/fish/config.fish
, agregue:No olvide reiniciar su instancia de fish reiniciando su terminal para que se apliquen los cambios.
Uso
Ahora puede usar
setclip
ygetclip
, por ejemplo:fuente
sudo pacman -S xclip
. Pero tenga en cuenta que.bashrc
no es el mejor lugar. Recomiendo que el usuario final lea los archivos bashrc, bash_aliases y .profile adecuados y cómo bash maneja cada uno. Consejo: póngalo en .bash_aliases en su lugar.pacman
administrador de paquetes y se eliminó la.bashrc
propuesta. Sé que.bash_aliases
está más adaptado, pero el resultado final es el mismo (.bashrc
simplemente se requiere.bash_aliases
si existe). Si la gente quiere un sistema desordenado, déjelos tener uno. :).bashrc
fuentes.bash_aliases
al final. ;) Sigo esta antigua convención, que sigue siendo 100% compatible en Arch, Ubuntu / Debian, variantes de Raspberry, macOS / OSX y Windows Bash: stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff Con esa convención, uso exactamente los mismos archivos de puntos en todas las máquinas Yo toco. Es bastante agradable: github.com/eduncan911/dotfilesEn macOS, use el incorporado
pbcopy
ypbpaste
comandos.Por ejemplo, si corres
el contenido del
~/.bashrc
archivo estará disponible para pegar con el acceso directoCmd
+v
.fuente
Tratar
xclip
hombre
fuente
xsel en Debian / Ubuntu / Mint
Instalar en pc
fuente
echo "foo" | xclip -selection c
?xsel
yxclip
son equivalentes en todos los sentidos, excepto quexclip
puede leer / escribir archivos por nombre, peroxsel
requiere redirección de shell si desea acceder a un archivo.xsel
funciona bien desde los scripts, mientrasxclip
funciona solo desde el indicador. No estoy seguro de por qué.Wow, no puedo creer cuántas respuestas hay para esta pregunta. No puedo decir que los haya probado todos, pero he probado los 3 o 4 mejores y ninguno de ellos me funciona. Lo que funcionó para mí fue una respuesta ubicada en uno de los comentarios escritos por un usuario llamado doug. Como lo encontré tan útil, decidí repetir una respuesta.
Instale la utilidad xcopy y cuando esté en la Terminal, ingrese:
Copiar
Pegar
Noté muchas respuestas recomendadas pbpaste y pbcopy. Si le gustan esas utilidades, pero por alguna razón no están disponibles en su repositorio, siempre puede crear un alias para los comandos xcopy y llamarlos pbpaste y pbcopy.
Entonces se vería así:
fuente
Respuesta 2018
Use portapapeles-cli . Funciona con macOS, Windows, Linux, OpenBSD, FreeBSD y Android sin ningún problema real.
Instalarlo con:
npm install -g clipboard-cli
Entonces puedes hacer
echo foo | clipboard
Si lo desea, puede alias
cb
poniendo lo siguiente en su.bashrc
,.bash_profile
o.zshrc
:alias cb=clipboard
fuente
npm
paquete seguro ?En el subsistema de Windows para Linux, puede copiar al portapapeles con clip.exe.
Recuerde usar el
|
comando de tubería. Y no es un>
comando, ya que eso no funcionará.fuente
Aquí hay un script bash listo para usar para leer el portapapeles que funciona en múltiples plataformas. Edite el script aquí si agrega funcionalidad (por ejemplo, más plataformas).
fuente
En Windows (con Cygwin) intente
cat /dev/clipboard
oecho "foo" > /dev/clipboard
como se menciona en este artículo.fuente
clip
. Estoy usando msysgit 1.9.5 y esto funcionó.echo "foo" > /dev/clipboard
parece destruir completamente los saltos de línea (no es un \ r \ n \ n cosa pero completamente ido)Solo para Mac:
Estos se encuentran
/usr/bin/pbcopy
y/usr/bin/pbpaste
.fuente
Hay diferentes portapapeles en Linux; el servidor X tiene uno, el administrador de ventanas puede tener otro, etc. No hay un dispositivo estándar.
Ah, sí, en CLI, el programa de pantalla también tiene su propio portapapeles, al igual que otras aplicaciones como Emacs y vi .
En X, puedes usar xclip .
Puede consultar este hilo para otras posibles respuestas: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html
fuente
Copie y pegue en el portapapeles en Windows (Cygwin):
Ver:
También existen getclip (se puede usar en lugar de Shift+ Ins!) Y putclip (echo oaeuoa | putclip.exe para ponerlo en clip).
fuente
Este es un script simple de Python que hace justo lo que necesita:
Guarde esto como un ejecutable en algún lugar de su ruta (lo guardé
/usr/local/bin/clip
. Puede canalizar cosas para guardarlas en su portapapeles ...Y puede canalizar lo que está en su portapapeles a otro programa ...
Ejecutarlo solo generará lo que está en el portapapeles.
fuente
cat tmpfile
no la operación del portapapeles. // igual que @horta responde.He encontrado una buena referencia: /unix/69111/
En mi caso, me gustaría pegar contenido en el portapapeles y también ver lo que se ha pegado allí, así que también utilicé el
tee
comando con un descriptor de archivo:>()
Es una forma de sustitución del proceso. bash reemplaza cada uno con la ruta a un descriptor de archivo que está conectado a la entrada estándar del programa entre paréntesis.El
tee
comando bifurca su comando permitiéndole "canalizar su contenido" y ver el resultado en la salida estándar "stdout"También puede crear alias para obtener y escribir en el portapapeles, lo que le permite utilizar "pbcopy" y "pbpaste" como si estuviera en MAC. En mi caso, cuando uso zsh tengo esto en mi archivo de alias:
el
(( $+command[name] ))
de pruebas zsh si el "nombre" de comandos está instalado en su sistema, entonces los dos alias se agrupan con{}
. the&&
es un AND binario, si a luego b, por lo tanto, si tiene xclip, se establecerán los alias.Para obtener el contenido de su portapapeles simplemente escriba:
fuente
Hace el trabajo para X Window, y en su mayoría ya está instalado. Merece la pena echar un vistazo a la página de manual de xsel .
fuente
Algunos programas de Windows que escribí hace años. Le permiten volcar, empujar, agregar e imprimir el portapapeles. Funciona así:
Incluye código fuente: cmd_clip.zip
fuente
Hay un par de maneras. Algunas de las formas que se han mencionado incluyen (creo) tmux, screen, vim, emacs y el shell. No conozco emacs ni screen, así que repasaré los otros tres.
Tmux
Si bien no es una selección X, tmux tiene un modo de copia accesible mediante
prefix-[
(prefix
es Ctrl+ Bpor defecto). El búfer utilizado para este modo es separado y exclusivo de tmux, lo que abre muchas posibilidades y lo hace más versátil que las selecciones X en las situaciones correctas.Para salir de este modo, presione q; para navegar, use su
vim
oemacs
enlace (predeterminado = vim),hjkl
por lo que para el movimiento,v/V/C-v
para la selección de caracteres / línea / bloque, etc. Cuando tenga su selección, presione Enterpara copiar y salir del modo.Para pegar desde este búfer, use
prefix-]
.Cáscara
Cualquier instalación de
X11
parece venir con dos programas por defecto:xclip
yxsel
(algo así como también viene con ambosstartx
yxinit
). La mayoría de las otras respuestas mencionanxclip
, y realmente me gustaxsel
por su brevedad, así que voy a cubrirxsel
.De xsel (1x) :
Y eso es todo lo que necesitas saber.
p
(o nada) paraPRIMARY
,s
paraSECONDARY
,b
paraCLIPBOARD
,o
para salida.Ejemplo: digamos que quiero copiar el resultado de
foo
un TTY y pegarlo en una página web para obtener un informe de error. Para hacer esto, sería ideal copiar a / desde la sesión TTY / X. Entonces, la pregunta es cómo accedo al portapapeles desde el TTY.Para este ejemplo, asumiremos que la sesión X está en exhibición
:1
.Entonces puedo
Ctrl-V
hacerlo en la forma habitual.Ahora digamos que alguien en el sitio de soporte me da un comando para ejecutar para solucionar el problema. Es complicado y largo.
Ordenar pizza parece un uso productivo de la línea de comando.
...hacia adelante.
Empuje
Si se compila con
+clipboard
(¡Esto es importante! Compruebe suvim --version
), Vim debería tener acceso a la XPRIMARY
y lasCLIPBOARD
selecciones. Se puede acceder a las dos selecciones desde los registros*
y+
, respectivamente, y se pueden escribir y leer en su tiempo libre como cualquier otro registro. Por ejemplo:Sin embargo, si su copia de vim no admite directamente el acceso a las selecciones X, no es el fin del mundo. Simplemente puede usar la
xsel
técnica como se describe en la última sección.Ate un par de combinaciones de teclas y debería ser bueno.
fuente
DISPLAY=
cuando llame a una aplicación X desde un entorno que no sea X. Las aplicaciones X necesitan laDISPLAY
variable de entorno para determinar a qué servidor (¿o hay un solo servidor que maneja varias sesiones?) Con las que están hablando. IntenteDISPLAY=:1 firefox
(o cualquiera que sea su ID de pantalla; el mío es el mío:1
) de un TTY, por ejemplo.:%y+
en VIM.Desde este hilo, hay una opción que no requiere instalar ningún
gclip
/xclip
/xsel
software de terceros.Un script perl (ya que perl generalmente siempre está instalado)
fuente
pbcopy está construido en OSX:
Copiando el contenido de .bash_profile:
fuente
En macOS, use
pbpaste
.Por ejemplo:
Actualiza el portapapeles
fuente
Si eres como yo y corres en un servidor Linux sin privilegios de root y no hay ningún xclip o GPM, puedes solucionar este problema simplemente usando un archivo temporal. Por ejemplo:
fuente
X selections
(lo que está necesariamente implícito en "portapapeles" y cualquier mención de xclip / xsel), necesita una sesión X activa (y, por lo tanto, un servidor X) para que pueda acceder a la selección en el primer lugar. Para ver a qué me refiero, intente ejecutarDISPLAY="" xsel
en su máquina local. Saldrá con un error, al no poder encontrar la sesión""
, y no se realizará ninguna interacción con ninguna selección X. Es por eso que inicialmente dije que no veo cómo los privilegios de root tienen en cuenta esto: root o no root, no es probable que encuentre una selección X útil en un entorno de servidor.En Linux esto funciona:
fuente
en Wayland xcopy no parece funcionar, use wl-clipboard en su lugar. por ejemplo, en fedora
fuente
También hay xclip-copyfile .
fuente
Aunque> 1 año después, comparto una solución ligeramente diferente. Espero que esto sea útil para alguien.
Ayer me encontré con la pregunta: "¿Cómo compartir el portapapeles entre diferentes sesiones de usuario?" . Al cambiar entre sesiones con ctrlaltF7-ctrlaltF8 , de hecho, no se puede pegar lo que ha copiado.
Se me ocurrió la siguiente solución rápida y sucia , basada en una tubería con nombre. Seguramente es bastante simple y crudo, pero lo encontré funcional:
luego en la terminal de envío
por último, en la terminal receptora:
Ahora, escribe o pega cualquier cosa en la primera terminal y (después de presionar return ), aparecerá inmediatamente en el terminal receptor, desde donde puede copiar / pegar nuevamente en cualquier lugar que desee.
Por supuesto, esto no solo toma estrictamente el contenido del portapapeles del usuario1 para que esté disponible en el portapapeles del usuario2, sino que requiere un par adicional de clics de Pegar y Copiar.
fuente
xsel/xclip
. Por ejemplo, un extremo escucha para ver si alguna de las selecciones cambió y luego la canaliza automáticamente (a través del FIFO nombrado) al otro script, que está escuchando una o más canalizaciones, que la inserta en su propia selección X. Copiar texto resultaría automáticamente en el mismo texto que aparece en la selección de la otra sesión X. Y no te olvides de eso$DISPLAY
.El rubel oneliner me inspiró a probar con python.
Digamos que queremos un comando que sangra lo que esté en el portapapeles con 4 espacios. Perfecto para compartir fragmentos en stackoverflow.
Eso no es un error tipográfico. Python necesita nuevas líneas para hacer un bucle for. Queremos alterar las líneas en una pasada para evitar construir una matriz adicional en la memoria.
Si no te importa construir la matriz adicional, prueba:
pero honestamente, awk es mejor para esto que python. Definí este alias en mi
~/.bashrc
archivoahora cuando ejecuto
indent
lo que está en mi portapapeles está sangrado.fuente