将输出作为启动器命令输出到系统剪贴板的 Bash 脚本

将输出作为启动器命令输出到系统剪贴板的 Bash 脚本

我正在运行 Xubuntu 20.04。我创建了一个小型 bash 脚本,用户可以在其中使用以下命令从列表中选择一行陣陣并将选择的内容输出到系统剪贴板。这是一个简单的单行代码:

cat list-select | fzf | xclip -sel c

其中list-select是包含要选择的项目的简单文本文件。

如果我在终端中运行该脚本,它就会起作用,但我想为该脚本创建一个键盘快捷键。这样,如果我正在写一封电子邮件,我就可以简单地使用此脚本从此列表中粘贴一个元素。

我认为创建一个启动器是个好主意,所以我右键单击桌面并选择Create Launcher。我给启动器起了个名字,把可执行文件的路径写成命令,然后选择Run in Terminal作为选项。这是桌面文件:

[Desktop Entry]
Version=1.0
Type=Application
Name=ClipSel
Comment=
Exec=/home/itsme/clipsel.sh
Icon=
Path=
Terminal=true
StartupNotify=false

我的脚本是:

#!/bin/bash 
cat /home/itsme/list-select | fzf | xclip -sel c 

并且它是可执行的:

$ ls -lah clipsel.sh
 -rwxrwxr-x 1 itsme itsme 62 Nov 14 16:13 clipsel.sh 

现在的问题是,当我执行此启动器时,我能够在列表中选择一行,但系统剪贴板中没有任何内容。

我猜我必须更改启动器命令中的某些内容,但我不知道具体要更改什么。有什么想法吗?

此外,如果您想到任何其他方法来做到这一点,我会很高兴听到。

此致

答案1

我没有fzf安装,但我使用脚本的更简单版本重现了您的问题:

#!/bin/bash
echo "pasted string" | xclip -sel c 

并确认放置在启动器中时不起作用除非您将“在终端中执行”设置为 false。但是,此启动器按预期工作:

[Desktop Entry]
Name=testXclip
Exec=/home/terdon/scripts/foo.sh
Comment=
Terminal=false
Icon=
Type=Application

答案2

好的,事实证明我不需要创建启动器来实现我的目标。

我可以简单地进入Keyboard设置并在那里添加应用程序快捷方式

如果我安装 copyq 并使用此命令,它就可以工作:

terminator -e "cat list-select | fzf | copyq copy -"

我使用终结器作为终端仿真器,但我认为它也可以用于其他终端仿真器。

了解为什么它不能与 xclip 一起使用会很有趣。

相关内容