![名称中带有空格的目录上的 KDE 自定义菜单操作](https://linux22.com/image/1193963/%E5%90%8D%E7%A7%B0%E4%B8%AD%E5%B8%A6%E6%9C%89%E7%A9%BA%E6%A0%BC%E7%9A%84%E7%9B%AE%E5%BD%95%E4%B8%8A%E7%9A%84%20KDE%20%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E6%93%8D%E4%BD%9C.png)
我创建了一个脚本,它使用不同的目录路径来将其中的文件合并到一个目录中。我将通过自定义 Kde-Dolphin 操作菜单执行此脚本,因此我创建了这个 .desktop 文件:
[Desktop Entry]
Type=Service
X-KDE-ServiceTypes=KonqPopupMenu/Plugin
MimeType=inode/directory;
Actions=mergeDir
X-KDE-AuthorizeAction=shell_access
[Desktop Action mergeDir]
Name=Merge this directories
Exec=konsole --noclose -e bash -c '/sc/dirs_merge.py -s %F'
Icon=folder-red
不幸的是, %F 不考虑空格的转义字符,因此当我对名称中带有空格的目录使用此操作时会出现问题,因为无法区分目录名称中的空格和作为目录分隔符的空格:
例如:/transit/mergetest/测试空白 2 /transit/mergetest/测试空白 1
有人知道这个问题的解决方案吗?
谢谢。
答案1
占位符%F
应该可以很好地处理包含空格的文件名 - 如 freedesktop 文档中所述Exec 键
%FA 文件列表。适用于可以同时打开多个本地文件的应用。每个文件都作为单独的参数传递给可执行程序。
因此,只要你的 python 脚本知道如何正确处理多个参数,你就根本不需要使用 bash shell - 只需将%F
参数列表直接传递给你的 python 脚本:
Exec=konsole --noclose -e /sc/dirs_merge.py -s %F
如果你做确实需要一个 bash shell,然后将参数作为位置参数传递,并记得引用扩展以$@
防止 shell 进行分词:
Exec=konsole --noclose -e bash -c '/sc/dirs_merge.py -s "$@"' bash %F
(第二个bash
只是为了填充 shell 的$0
参数 - 您可以在那里替换任何字符串)。