创建可执行的Bash脚本,可以接受拖放操作。

10
我在Ubuntu上从源代码编译了mplayer。我不想使用GUI,但我想创建一个可执行的bash文件,该文件可以从一个放置在该bash文件上的文件中获取路径。我该如何实现这样的功能?
我希望它看起来像这样:mplayer <获取文件完整路径>文件结尾> 我希望可执行的Bash文件位于我的桌面上 ;)
如果可能的话,我只是想要一个右键单击-> 用mplayer启动的功能,但我不知道如何制作。

抱歉,这不是一个编程问题,请投票将其转移到http://superuser.com/,或者您可以“标记”它并请求管理员移动。(我没有对你的问题进行投票)。祝好运。 - shellter
你使用哪个GUI环境? - sarnold
哦,抱歉,我只是习惯在stackoverflow上发布xD我在Ubuntu上使用Gnome 3而不是Unity,仍然使用LightDM。 - HitomiTenshi
3个回答

7
您可以使用$1来访问传递给脚本的参数(第一个参数)。并且您应该制作一个.desktop文件,以便Nautilus(或您的桌面管理器)知道该做什么,并使用%u来将拖放的路径传递给脚本。
例如,您可以创建一个名为DropOverMe.desktop的文件:
[Desktop Entry]
Encoding=UTF-8
Name=Drop Over Me
Comment=Execute the script with the file dropped
Exec=gnome-terminal -e "/folder/to/the/script/launchme.sh \"%u\""
Icon=utilities-terminal
Type=Application

我使用gnome-terminal,因为我的电脑上安装了Ubuntu,您可以使用您喜欢的终端应用程序。

脚本可能是这样的:

#! /bin/bash

echo "Launched with $1" >> /tmp/history.log

2
你来晚了将近6年。不过还是感谢你提供了详尽的答案! - HitomiTenshi
3
谢谢,仅供像我一样迟到的人参考;-)。 - PhoneixS
我想知道如何使用WSL2完成这个任务,直到最近它还是无头的。 - Mike Slinn

3

尝试:

#!/bin/bash
mplayer "$1"

被拖动文件的文件路径将作为第一个命令行参数传递给脚本文件。

1
不知为何我无法在.sh文件上进行拖放操作。文件只会堆积或复制到桌面上。 - HitomiTenshi
2
哦天啊,终于搞定了!感谢你的代码,它很好用!我只需要创建一个 mplayer.desktop 快捷方式,启动 .sh 文件,就可以将其用作可执行文件。而且我还需要给这两个文件完全权限。现在它运行得非常流畅 ;) - HitomiTenshi
3
@HitomiTenshi,如果你能分享你的.desktop文件内容,这将对我大有帮助 - 我在这方面很困惑。 - alfadog67
@alfadog67,您可能需要在Exec行末尾添加%u(在xfce中有效),以便将参数传递给脚本。 - complistic

1

在打开的终端中

通过使用mate-terminalgnome-terminalkonsole,您可以将文件拖放到已打开的窗口中。

这将以提示方式发送URL,并添加一个空格,但没有结束行

为此,请运行mplayer,我编写了这个小循环函数:

while IFS=$' \t\r\n' read -d '' -p "Wait for URL to play: " -rsn 1 str &&
    [ "$str" ];do
    while IFS= read -d '' -rsn 1 -t .02 char
    do str+="$char"
    done
    if [ "$str" ] ;then
        read -a req <<<"$str"
        echo $req
        mplayer $req
    fi
  done
  • 首次读取将确定是否有内容,否则结束循环。
  • 第二个循环采用极短的超时时间读取已删除URL作为一个字符串。
  • read -a req会将字符串拆分以仅考虑第一部分。

由于Lubuntu似乎不支持在脚本或桌面条目上进行拖放,因此这是一个不错的解决方案,适用于任何需要快速在给定应用程序中运行某些内容的情况(在我的情况下是md5sum)。 - feos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接