'xclip'のパイプは、bashスクリプトの終了後も保持されません。

'xclip'のパイプは、bashスクリプトの終了後も保持されません。

次のように、選択内容をクリップボードfzfに保存するインタラクティブなbashスクリプトがあります。X

#!/bin/bash

cat /path/to/file.txt | fzf | xclip -sel p -sel s -sel c

exit 0

テキストファイルには、次のような数行が含まれています。

one
two
three
four
five

ターミナルエミュレータでスクリプトを手動で実行すると、パイプの内容が永久に保存され、ターミナルエミュレータを閉じた後でも貼り付けることができますbash path/to/script.shxclip

ただし、要求に応じて使用するためにDEのキーボードショートカットにバインドしたいので、端末エミュレータコマンドと一緒に使用する必要があります。例: mate-terminal -x bash /path/to/script.sh。うまく開かれますが、選択後に終了するとコンテンツが失われ、xclipそれ以上貼り付けることはできません。スクリプトの終了を遅らせると、sleep 5端末がまだ開いている間にパイプ内容の貼り付けが機能しますが、終了すると失われます。

X端末エミュレータを閉じた後でもクリップボードの内容を保持する方法が必要です。

ベストアンサー1

この-loops 0オプションを使用します(デフォルト)。他のプロセスがX選択の所有権を要求するまで、X選択を無期限に使用できるようにします。

ただし、プログラムをキーボードショートカットにバインドすると、xclipデーモンが返された後に終了します。端末でプログラムを起動すると、この動作は発生しません。この-verboseオプションを使用すると、プログラムは前景で実行され、端末も変更されていません。

xclipデーモンを実行し続け、ターミナルウィンドウを表示したくない場合は、このnohupプログラムを使用することを選択できます。 initプロセスをPPID(systemdなど)として使用してコマンドを実行します。

#!/bin/bash

cat /path/to/file.txt | fzf | nohup xclip -loops 0 -sel p -sel s -sel c

おすすめ記事