10

我在 Ubuntu 上从源代码编译了 mplayer。我不想使用 GUI,但我想制作一个可执行的 bash 文件,该文件从拖放到 bash 文件中的文件中获取路径。我怎样才能使这样的事情成为可能?

我想让它看起来像这样: mplayer <get full path to file.file-ending>

我希望可执行的 bash 文件放在我的桌面上;)


如果可能的话,我只是想要一个rightclick -> start with mplayer功能,但我不知道如何制作。

4

3 回答 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在我的 PC 上使用 Ubuntu,使用您喜欢的终端应用程序。

脚本可能类似于:

#! /bin/bash

echo "Launched with $1" >> /tmp/history.log
于 2018-03-26T20:45:38.743 回答
3

尝试:

#!/bin/bash
mplayer "$1"

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

于 2012-05-01T03:28:45.070 回答
1

在打开的终端中

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

这将发送 URL 作为提示,添加一个空格,但没有endline

为此,运行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将拆分字符串以仅考虑第一部分
于 2020-08-08T17:19:05.537 回答