![脚本 1:无空格的情况:](https://linux22.com/image/1412623/%E8%84%9A%E6%9C%AC%201%EF%BC%9A%E6%97%A0%E7%A9%BA%E6%A0%BC%E7%9A%84%E6%83%85%E5%86%B5%EF%BC%9A.png)
我想启动一个 Wine 应用程序并将文件作为参数传递。我有两个文件,第一个文件没有任何问题,但是当路径中有空格时,Wine 无法正确处理地址。以下是这两个文件:
/home/op/Doc/test.pdf
/home/op/Doc/test vs space.pdf
从命令行我可以使用以下命令成功启动包含这两个文件的应用程序:
[/home/op@box ~]: wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" "z:Docs/test.pdf"
[/home/op@box ~]: wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" "z:Docs/test vs space.pdf"
但是当我想将其放入脚本中(稍后使用另一个程序 ranger 启动)时,我无法使用测试文件启动该程序。第一个脚本适用于地址中没有任何空格的程序,但第二个脚本不起作用,只会启动应用程序而不打开 pdf 文件:
脚本 1:无空格的情况:
#!/bin/bash
Filename="z:${1//\//\\}"
wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" $Filename
脚本 2:在任何一种情况下都不起作用
#!/bin/bash
Filename="z:${1//\//\\}"
Filename='"'$Filename'"'
wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" $Filename
echo $Filename
我不明白这个脚本哪里出了问题(与在 shell 中手动发出的命令相比)。第二个脚本不打开任何类型的文件,无论地址中是否有空格。
ps 还有类似的脚本这里但他们面临同样的问题,即他们无法启动地址中带有空格的 pdf。
答案1
我发现你的脚本中存在几个拼写错误,这些错误可能会导致脚本无法正确执行:
#!/bin/bash
Filename="z:${1//\//\\}"
# Filename='"'$Filename'"'
# you can just leave this line, the triple quoting is unnecessary anyway
wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" "$Filename" # it's better to quote variables containing strings
echo "$Filename" # the same here