web-dev-qa-db-ja.com

bashスクリプトでwineアプリに引数としてファイル名(パスにスペースを含む)を渡す

ファイルを引数として渡してワインアプリをローンチしたい。私は2つのファイルを持っていますが、最初のファイルは問題ありませんが、パスにスペースがあると、wineはアドレスを適切に処理できません。これらの2つのファイルは次のとおりです。

/ 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"

しかし、これをスクリプトに入れたい場合(後で別のプログラム、レンジャーで実行するため)、テストファイルを使用してプログラムを起動することはできません。最初のスクリプトは、アドレスにスペースがないスクリプトでうまく機能しますが、2番目のスクリプトは機能せず、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

スクリプトのどこが間違っているのかわかりません(シェルで手動で発行されたコマンドと比較して)。 2番目のスクリプトは、アドレスにスペースがある場合とない場合で、どのタイプのファイルも開きません。

p.s.同様のスクリプトもあります ここ しかし、同じ問題が発生します。つまり、アドレスにスペースを入れてPDFを起動することもできません。

2
SdidS

スクリプトにいくつかのタイプミスやエラーがあり、スクリプトを正しく実行できない可能性があります。

#!/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
1
psimon