我正在 Zenity 中编写一个小转换脚本,但注意到 ctmconv 不允许文件名中有空格。我可以去掉输入文件名中的空格吗?
#!/bin/bash
cd ~/Desktop
file="$(zenity --title "3D Converter: Select a File to convert" --file-selection --file-filter=""*.ctm" "*.ply" "*.stl" "*.3ds" "*.dae" "*.obj" "*.lwo" "*.off"")"
filetype=$(zenity --list --title="Select File Type" --text="file types\ selection" --column="Select" --column="File Type" --radiolist false 3ds false ctm false dae false lwo false obj false off false ply true stl false wrl)
szSavePath="$(zenity --file-selection --filename="${file%%."${file##*.}"}"."$filetype" --save --confirm-overwrite)"
# szSavePath="$(zenity --file-selection --filename="out"."$filetype" --save --confirm-overwrite)"
ctmconv "$file" $szSavePath
zenity --info --text "Conversion Completed"
上述脚本获取要转换的文件,然后要求输入要转换的文件类型。然后,它将原始文件类型替换为新文件类型,并将结果传递给 ctmconv。这样做可能有点麻烦,但没关系!我是新手。
如果“$file”是“model rail”,ctmconv 就会失败,但如果只是“model”,则没问题
答案1
由于某些非常奇怪的原因,ctmconv
如果引用的变量的内容包含空格,则不会将其识别为一个实体。(也值得将此行为作为错误报告给开发人员)。
我建议您使用任何文本编辑工具,例如sed
或awk
在空格前插入反斜杠。例如,像这样。
$ echo "with space" | sed 's/\ /\\ /g'
with\ space
如果你的变量,可以这样做:
$ file="with space"
$ file="$( echo $file | sed 's/\ /\\ /g' )"
$ echo "$file"
with\ space
答案2
我无法掌握评论的窍门。我无法发布代码,因为它太长了,我无法上传它。我甚至无法在上面写一行,所以我必须自己回答我的问题
#!/bin/bash
cd ~/Desktop
file="$(zenity --title "3D Converter: Select a File to convert" --file-selection --file-filter=""*.ctm" "*.ply" "*.stl" "*.3ds" "*.dae" "*.obj" "*.lwo" "*.off"")"
file="$( echo $file | sed 's/\ /\\ /g' )"
filetype=$(zenity --list --title="Select File Type" --text="file types\ selection" --column="Select" --column="File Type" --radiolist false 3ds false ctm false dae false lwo false obj false off false ply true stl false wrl)
szSavePath="$(zenity --file-selection --filename="${file%%."${file##*.}"}" --save --confirm-overwrite)"
echo ctmconv $file $szSavePath."$filetype"
ctmconv $file $szSavePath."$filetype"
zenity --info --text "Conversion Completed"`
我只放置了 echo ctmconv 等,因此如果您在终端中执行,则不需要 ctmconv 来查看输出。
ctmconv /home/alistair/Desktop/plastic/Buffers/Model\ Rail.stl /home/alistair/Desktop/Model\ Rail.3ds
Error: Invalid argument: /home/alistair/Desktop/Model\`
ctmconv 尝试输出文件时失败:输入被接受。
但是如果我复制、粘贴并执行“echo”行,它就能完美地运行......
如果我可以从 szSaveFile 中删除空格会怎么样?可以做到吗?