使用 bash 命令和终端进行桌面操作

使用 bash 命令和终端进行桌面操作

我尝试在 KDE 下创建一个桌面文件服务操作,通过提示分割 flac 文件,我希望它打开一些终端来显示该进程,理想情况下等待我关闭它(用于检查潜在的错误)。

到目前为止,我有一个像这样的桌面文件:

[Desktop Entry]
Type=Service
Encoding=UTF-8
ServiceTypes=KonqPopupMenu/Plugin,audio/x-flac,audio/x-flac+ogg,audio/x-oggflac
Icon=soundconverter
Actions=SplitFlacByCue;

[Desktop Action SplitFlacByCue]
Terminal=true
Name=split flac by cue
Icon=soundconverter
Exec=bash -c '$(file=$(basename "%f"); filename="${file%.*}"; shntool split -f \'$filename.cue\' -o \'flac flac --output-name=%f -\' -t \'%n - %p - %t\' \'$filename.flac\')'

我没有看到终端,没有错误,由于 shntool 部分,它会失败,我无法传递 $filename 变量。我尝试了很多变体,但似乎我没有找到正确的方法。

有人可以帮我吗?谢谢。

[编辑]

简单地说:我需要一个桌面文件,其中 Exec 参数中有一个脚本,用于通过同名的提示分割一个 flac(当然,扩展名除外)。右键单击 flac 文件时应该会出现该文件。这里的挑战是如何在一个 Exec 条目而不是 .sh 文件中完成此操作。

我已经到了这个地步:

Exec=xterm -e 'file=$(basename "%f"); filename="${file%.*}"; echo $filename; shntool split -f \""${filename}".cue\" -o '\''flac flac --output-name=%f -'\'' -t '\''%n - %p - %t'\'' \""${filename}".flac\"; bash\'

但是,当触发操作时,会发生一般错误,告诉它无法解析该条目:

处理 Exec 字段时出错

问题出在 shntool 部分,如果我删除它,它会打开 xterm 并打印变量值。

第二次尝试:

Exec=xterm -e 'file=$(basename "%f");文件名=“${文件%.*}”;回显$文件名; shntool split -f \""$filename".cue\" -o "'"flac flac --output-name=%f -"'" -t "'"%n - %p - %t"'" \ ""$文件名".flac\";重击'

结果是:

作者 - 标题 shntool [split]:警告:无法打开不存在的内容

文件:[“author - title.flac”] shntool [split]:错误:由于上面显示的错误而无法继续

尽管如此,我还是不明白这个错误的原因。

[一个星期后...]

这是解决方案:

[Desktop Entry]
Type=Service
Encoding=UTF-8
ServiceTypes=KonqPopupMenu/Plugin,audio/x-flac,audio/x-flac+ogg,audio/x-oggflac
Icon=soundconverter
Actions=SplitFlacByCue;

[Desktop Action SplitFlacByCue]
Terminal=true
Name=split flac by cue
Icon=soundconverter
Exec=xterm -e 'path=$(dirname "%f"); echo $path; file=$(basename "%f"); filename="${file%.*}"; echo $filename; shntool split -D -f """$filename".cue"" -o "'"flac flac --output-name=%%f -"'" -t "'"%%n - %%p - %%t"'" """$filename".flac""; bash'

答案1

我看到这三个问题:

  1. 你似乎有太多的执行级别 - 你先运行shntool然后再运行的输出shntool(那个bash -c部分)。想必您想要的bash -c 'file=[...]'是。
  2. 我不确定这里的命令行是如何解析的,但是在 Bash 中你不能在单引号内的任何位置转义单引号 - 您必须使用$''"" 引号反而。
  3. 你刚刚碰上了shell 和终端之间的区别。您不需要运行bash(一个 shell,它没有图形组件),而是需要运行一个终端,例如gnome-terminalterminatorxterm(您应该至少有其中之一)。xterm -e 'echo "Hello World"; sleep 5s'例如,将打开一个新的终端窗口,运行这两个命令,并在最后一个命令完成时退出。如果您希望窗口在命令完成后保持打开状态,您可以添加一个 shell 作为最后一个命令:

    xterm -e 'echo "Hello World";睡眠5秒;重击'

相关内容