首页 > 解决方案 > 从 .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 行的末尾删除,它可以工作。由于某种原因,这段文本在拖放文件的路径中输入了单引号或双引号。

标签: linuxbashshelldrag-and-drop

解决方案


推荐阅读