脚本 1:无空格的情况:

脚本 1:无空格的情况:

我想启动一个 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

相关内容