¿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/clipse 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 '+' (elPRIMARYportapapeles 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 elxclipcomando 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 cenviará 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 | pbcopySi estás en Linux modo terminal (NO x) y luego mirar hacia
gpmo pantalla que tiene un portapapeles. Prueba elscreencomandoreadreg.En Windows 10+ o cygwin, use
/dev/clipboardoclip.fuente
/dev/clipboardtambién funciona para Msys / MinGW bash shellsxclip -selection cenviará datos al portapapeles que funciona con ^ C, ^ V en la mayoría de las aplicacionesclipla 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
=== testfuente
xclip -selection clipboard -oalias pbcopy="xclip -selection c"alias pbpaste="xclip -selection clipboard -o"Espero que ayude.xclipno agrega una nueva línea,echoes. Tratarprintf test | xclip -i -selection clipboard. (printfno agrega una nueva línea a menos que escriba'test\n')echo -nlugar deprintf.Instalar en pc
Si no tiene acceso a
apt-getnipacman, nidnf, las fuentes están disponibles en sourceforge .Preparar
Golpetazo
En
~/.bash_aliases, agregue:No olvide cargar su nueva configuración utilizando
. ~/.bash_aliaseso 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
setclipygetclip, por ejemplo:fuente
sudo pacman -S xclip. Pero tenga en cuenta que.bashrcno 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.pacmanadministrador de paquetes y se eliminó la.bashrcpropuesta. Sé que.bash_aliasesestá más adaptado, pero el resultado final es el mismo (.bashrcsimplemente se requiere.bash_aliasessi existe). Si la gente quiere un sistema desordenado, déjelos tener uno. :).bashrcfuentes.bash_aliasesal 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
pbcopyypbpastecomandos.Por ejemplo, si corres
el contenido del
~/.bashrcarchivo estará disponible para pegar con el acceso directoCmd+v.fuente
Tratar
xcliphombre
fuente
xsel en Debian / Ubuntu / Mint
Instalar en pc
fuente
echo "foo" | xclip -selection c?xselyxclipson equivalentes en todos los sentidos, excepto quexclippuede leer / escribir archivos por nombre, peroxselrequiere redirección de shell si desea acceder a un archivo.xselfunciona bien desde los scripts, mientrasxclipfunciona 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-cliEntonces puedes hacer
echo foo | clipboardSi lo desea, puede alias
cbponiendo lo siguiente en su.bashrc,.bash_profileo.zshrc:alias cb=clipboardfuente
npmpaquete 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/clipboardoecho "foo" > /dev/clipboardcomo se menciona en este artículo.fuente
clip. Estoy usando msysgit 1.9.5 y esto funcionó.echo "foo" > /dev/clipboardparece 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/pbcopyy/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 tmpfileno 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
teecomando 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
teecomando 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-[(prefixes 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
vimoemacsenlace (predeterminado = vim),hjklpor lo que para el movimiento,v/V/C-vpara 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
X11parece venir con dos programas por defecto:xclipyxsel(algo así como también viene con ambosstartxyxinit). La mayoría de las otras respuestas mencionanxclip, y realmente me gustaxselpor su brevedad, así que voy a cubrirxsel.De xsel (1x) :
Y eso es todo lo que necesitas saber.
p(o nada) paraPRIMARY,sparaSECONDARY,bparaCLIPBOARD,opara salida.Ejemplo: digamos que quiero copiar el resultado de
fooun 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-Vhacerlo 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 XPRIMARYy lasCLIPBOARDselecciones. 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
xselté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 laDISPLAYvariable 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/xselsoftware 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="" xselen 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
~/.bashrcarchivoahora cuando ejecuto
indentlo que está en mi portapapeles está sangrado.fuente