linux - 从 .desktop 文件上的拖放文件获取输入时,bash 脚本不会运行命令
问题描述
我正在尝试创建一个简单的拖放方法来从多页 pdf 文件中提取页面。我有一个.desktop
文件,当文件放在它上面时应该运行 bash 脚本。如果我./extractpages.sh
使用 $thefile 的手动路径运行脚本,它运行良好、记录变量并运行命令。对于同一目录中的多页 pdf 中的每个页面,您最终会得到一个单独的 pdf。但是,当我将文件拖放到“单独的 pdf pages.desktop”文件中时,它正在接收拖放文件的路径,因为变量已正确回显到日志文件中。它只是不运行最终命令。或者至少我不这么认为。
另一个问题:bash 脚本运行时如何检查错误? 我注意到的一件事是在日志文件中,一些项目周围有'(单引号),一些项目的开头只有一个',而一些项目周围没有。我认为这可能是问题所在,所以我在命令字符串中输入了手动 '。还是不行。FWIW 我正在使用 Linux Mint 20 和 Mate。
.desktop 文件:
#!/usr/bin/env xdg-open
[Desktop Entry]
Encoding=UTF-8
Name=Test
Comment=Drag a multipage pdf to seperate it into single pages.
Exec=mate-terminal -e "/home/spoolserver/Desktop/pdfsepfiles/extractpages.sh \"%u\""
#Exec=mate-terminal -e /home/spoolserver/Desktop/pdfsepfiles/extractpages.sh %U
Icon=/home/spoolserver/Desktop/pdfsepfiles/old/pdfsep1.svg
Type=Application
Terminal=true
Name[en_US]=Separate pdf pages.desktop
bash脚本:
#!/bin/bash
thefile="$1"
#thefile=/home/spoolserver/Desktop/pdfsepfiles/PIO11082021A.pdf
thename="$(basename "$thefile")" #not excluding the extension
thebasename="${thename%.*}" #excluding the extension
thepath=$(dirname "$thefile")
thenewname="$thebasename"'%02d.pdf'
echo "thefile is $thefile" >> /home/spoolserver/Desktop/pdfsepfiles/test.log
echo "$1" >> /home/spoolserver/Desktop/pdfsepfiles/test.log
echo "thepath is $thepath" >> /home/spoolserver/Desktop/pdfsepfiles/test.log
echo "thenewname= $thenewname" >> /home/spoolserver/Desktop/pdfsepfiles/test.log
echo "The command is pdfseparate $thefile $thepath/$thenewname'" >> /home/spoolserver/Desktop/pdfsepfiles/test.log
echo "-------------------------" >> /home/spoolserver/Desktop/pdfsepfiles/test.log
pdfseparate "$thefile" "$thepath"/"$thenewname'"
我已经回显了所有变量,以便我可以尝试找出最后的命令不运行的原因。以下是日志文件的内容:
thefile is '/home/spoolserver/Desktop/pdfsepfiles/PIO1102021A.pdf'
'/home/spoolserver/Desktop/pdfsepfiles/PIO1102021A.pdf'
thepath is '/home/spoolserver/Desktop/pdfsepfiles
thenewname= PIO1102021A%02d.pdf
The command is pdfseparate '/home/spoolserver/Desktop/pdfsepfiles/PIO1102021A.pdf' '/home/spoolserver/Desktop/pdfsepfiles/PIO1102021A%02d.pdf'
-------------------------
编辑:我找到了我的一个问题的答案。
bash 脚本运行时如何检查错误?
如果添加2>> path/to/log/file
它将记录命令产生的错误。这些错误是:
I/O Error: Couldn't open file '"/home/ftpusers/Pioneer/PIO11182021B.pdf"': No such file or directory.
Syntax Error: Could not extract page(s) from damaged file ('"/home/ftpusers/Pioneer/PIO11182021B.pdf"')
路径是正确的。权限是正确的。我可以手动运行该命令并且它可以工作。它是否与扩展变量产生的语法有关?
编辑:看起来我解决了这个问题。如果我\"%u\"
从 .desktop 文件中 exec 行的末尾删除,它可以工作。由于某种原因,这段文本在拖放文件的路径中输入了单引号或双引号。
解决方案
推荐阅读
- html - 将元素定位在两者都在的元素内
- 元素?
- android - 如何确定 Android 10 设备加入的多播组?
- rust - 如何通过特征委托具有非静态参数的异步函数?
- wiremock - Spring Cloud Contract Stub Runner:如何配置 Wiremock 服务器?
- sql - 删除注入 wordpress 数据库的脚本
- google-cloud-platform - 区域丢失后从 Dataflow 恢复 PubSub 确认的消息
- python - 根据日期从数据框中提取值
- java - 网络接口:您无权在该设备上捕获(套接字:不允许操作)
- flask-login - 带有 SQLALCHEMY_BINDS 的烧瓶安全性丢失静态文件池的连接
- unity3d - 如何在 Unity 中集成 xBim?