O autor da pergunta original no Stackoverflow < um href="https://stackoverflow.com/a/40137805/6394138"> identificou isso como um problema no xclip . Usando xsel
em vez de xclip
para manipular a área de transferência X elimina o problema (observe que xclip
foi substituído por xsel
somente quando coloca dados na área de transferência, e não quando < em> lendo de a área de transferência):
$ cat xclip_test
#!/usr/bin/env bash
set -x
xterm -e bash -c "echo abc|xclip -selection clipboard; sleep 3"&
sleep 1
xclip -o -selection clipboard
sleep 4
xclip -o -selection clipboard
$ cat xsel_test
#!/usr/bin/env bash
set -x
xterm -e bash -c "echo abc|xsel --input --clipboard; sleep 3"&
sleep 1
xclip -o -selection clipboard
sleep 4
xclip -o -selection clipboard
$ diff xclip_test xsel_test
3c3
< xterm -e bash -c "echo abc|xclip -selection clipboard; sleep 3"&
---
> xterm -e bash -c "echo abc|xsel --input --clipboard; sleep 3"&
$ ./xclip_test
+ sleep 1
+ xterm -e bash -c 'echo abc|xclip -selection clipboard; sleep 3'
+ xclip -o -selection clipboard
abc
+ sleep 4
+ xclip -o -selection clipboard
Error: target STRING not available # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$ ./xsel_test
+ sleep 1
+ xterm -e bash -c 'echo abc|xsel --input --clipboard; sleep 3'
+ xclip -o -selection clipboard
abc
+ sleep 4
+ xclip -o -selection clipboard
abc
Ambos xclip
e xsel
funcionam desanexando do terminal e gerando um processo filho que é responsável pelo fornecimento da (s) seleção (ões) sob demanda (até que uma nova seleção seja feita):
$ ps -H
PID TTY TIME CMD
24307 pts/12 00:00:01 bash
27476 pts/12 00:00:00 ps
$ echo qwerty|xclip -selection clipboard
$ ps -H
PID TTY TIME CMD
27481 pts/12 00:00:00 xclip <-- !!!!!!
24307 pts/12 00:00:01 bash
27482 pts/12 00:00:00 ps
O problema com xclip
parece ser que, quando lançado de um shell não interativo, ele não se torna totalmente independente do terminal de controle e morre quando o processo do terminal termina.