【发布时间】:2022-01-08 11:26:05
【问题描述】:
这个 bash shell 脚本 使用 zenity 接受多个 .pdf 文件输入并存储在一个数组中,以便将 ghostscript .pdf 转换为 .jpeg。
问题
- 需要将文件路径存储在带有转义空格的数组中才能进入 gs 命令 $i
- 在 for 循环内的 gs 命令中需要输出文件名的基本文件名
- gs 命令需要带空格的文件名。
- 无法运行gs command error command not found on line 20。
代码:
#get list of selected files from Graphical Dialog
listOfFilesSelected=$(zenity --file-selection --multiple --filename "${HOME}/")
#echo $listOfFilesSelected
# Here pipe is our delimiter value
IFS="|" read -a listFiles <<< $listOfFilesSelected
#echo "File: ${listFiles[@]}"
# get length of an array
#arraylength=${#listFiles[@]}
#echo "${listFiles[0]}"
##echo $'\n'
#echo "Number of elements in the array: ${#listFiles[@]}"
for i in "${listFiles[@]}"
do
echo $i
baseFileName = $(basename '$i')
echo $baseFileName
gs -dNOPAUSE -sDEVICE=jpeg -sOutputFile=output%d.jpg -dJPEGQ=100 -r600 -q $i -c quit
done
输出:错误
/home/q/Downloads/FinalAnsKey22COMPUTER SCIENCE.pdf
./zentest.sh: line 20: baseFileName: command not found
Error: /undefinedfilename in (/home/q/Downloads/FinalAnsKey22COMPUTER)
Operand stack:
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push
Dictionary stack:
--dict:732/1123(ro)(G)-- --dict:0/20(G)-- --dict:75/200(L)--
Current allocation mode is local
Last OS error: No such file or directory
GPL Ghostscript 9.50: Unrecoverable error, exit code 1
【问题讨论】:
-
对于 Ghostscript,将文件名放在引号 "" 中,因为它包含一个空格。不知道 baseFileName: command not found 是什么。
-
通过shellcheck.net 运行它,并修复它指出的引用和间距问题。
-
baseFileName = $(basename '$i')必须是baseFileName=$(basename "$i")。也就是说,=和$i周围没有空格,用双引号(不是单引号)括起来。$i在gs命令中也必须用双引号引起来。 -
显示
zenity --file-selection --multiple --filename "${HOME}/"的输出。