Cómo dirigir múltiples selecciones con xclip

11

Al copiar texto en el portapapeles, xclip proporciona varios objetivos de selección:

 -selection
    specify which X selection to use, options are:
    "primary" to use XA_PRIMARY (default), 
    "secondary" for XA_SECONDARY 
    "clipboard" for XA_CLIPBOARD

¿Hay alguna manera de orientar las selecciones múltiples?

He probado las siguientes opciones

  1. echo "Hello world" | xclip -i -selection primary -selection clipboard
  2. echo "Hello world" | xclip -i selection primary | xclip -i selection clipboard
  3. echo "Hello world" | xclip -i selection primary,clipboard

pero ninguno de ellos funcionó.

Amelio Vazquez-Reina
fuente

Respuestas:

16

He probado las siguientes opciones

echo "Hello world" | xclip -i selection primary | xclip -i selection clipboard  

Estabas realmente cerca ...
Si lo usas -fcon el primer xclipcomando, imprimirá el texto nuevamente en stdout y podrás canalizarlo al segundo xclipcomando:

echo "Hello World" | xclip -i -sel p -f | xclip -i -sel c

De man xclip:

-f, -filter
            when xclip is invoked in the in mode with output level set to
            silent (the defaults), the filter option will cause xclip to print
            the text piped to standard in back to standard out unmodified
don_crissti
fuente
¡Gracias! Estoy aceptando esta solución porque: 1) Informa sobre una característica interesante de xclip. 2) Se me permite tuberías xclipcomandos, que es bastante conveniente y 3) Por alguna extraña razón, es la única respuesta hasta el momento que da una solución de trabajo en mis experimentos para la unión copy-pipeen tmux(esto es lo que impulsó a esta pregunta)
Amelio Vázquez-Reina
2
Si su distribución proporciona xsel, una alternativa a xclip, puede usar echo 'Hello World' | xsel -i -p && xsel -o -p | xsel -i -b. Es ligeramente diferente y menos eficiente que xclipdebido a la xselfalta de una opción de filtro. Pero si está atrapado, xselentonces esta es una manera de resolver el problema.
Starfry
5

No lo uso xclip, por lo que puede haber una forma de hacer esto de forma nativa que no conozco. En cualquier caso, esto debería funcionar asumiendo que su shell es bash:

echo "Hello world" | tee >(xclip -i -selection primary) >(xclip -i -selection clipboard) >/dev/null

>()Es una forma de sustitución de procesos. bashreemplaza cada uno con la ruta a un descriptor de archivo que está conectado a la entrada estándar del programa entre paréntesis.

Chris Down
fuente
¡Gracias! ¿Sabes si esa sintaxis también es compatible zsh?
Amelio Vazquez-Reina
@ user815423426 Que yo sepa, sí.
Chris Down
¡He probado aquí en mi zsh y funciona de maravilla!
SergioAraujo