そのスクリプトを呼び出すときは、bashスクリプトで定義されている関数にパラメータを渡そうとします。これは私にとって些細なようですが、実際にはもっと難しいようです。
スクリプトは次のとおりです。
#!/bin/bash
function run_wine
{
WINEPREFIX=/disk1/.wine-ptgui WINEDLLOVERRIDES=mscoree=d /software/wine/1.7.42/linux.centos6.i386/bin/wine /disk1/.wine-ptgui/drive_c/Program\ Files/PTGui/PTGui.exe "$@"
}
# Check if we already have the wineprefix installed
if [ -d /disk1/.wine-ptgui ]; then
prefixExist=1
echo "$@"
run_wine "$@" &
sleep 5
exit 0
else
echo "no wineprefix"
exit 1
fi
次のコマンドでスクリプトを呼び出します。
./ptgui -batch -x /folder/project.pts
そして、行によってエコーされたパラメータを見ることができますが、パラメータが提供されていないかのecho "$@
ようにプログラムが実行されるため、パラメータは関数に渡されないようです。したがって、プログラムの実行は機能しますがパラメータが渡されないようです。
ただし、 "run_wine"関数が引数で呼び出されるシェルでコマンドを実行すると、プログラムは期待どおりに起動します。
$ WINEPREFIX=/disk1/.wine-ptgui WINEDLLOVERRIDES=mscoree=d /software/wine/1.7.42/linux.centos6.i386/bin/wine /disk1/.wine-ptgui/drive_c/Program\ Files/PTGui/PTGui.exe -batch -x /folder/project.pts
上記のコマンドは私のシェルで正しく実行されます。
私が誤って何かを避けているのでしょうか?
編集:bash -x出力
bryce-e@aw42e:dev$bash -x !!
bash -x ./ptgui -batch -x /folder/project.pts
+ '[' -d /disk1/.wine-ptgui ']'
+ prefixExist=1
+ echo -batch -x /folder/project.pts
-batch -x /folder/project.pts
+ sleep 5
+ run_wine
+ WINEPREFIX=/disk1/.wine-ptgui
+ WINEDLLOVERRIDES=mscoree=d
+ /software/wine/1.7.42/linux.centos6.i386/bin/wine '/disk1/.wine-ptgui/drive_c/Program Files/PTGui/PTGui.exe'
{{snipping out some wine messages here}}
+ exit 0
答え1
これがうまくいくという保証はありませんが、ここで問題はパスを正しく構築しないことです。フルパスにはを含める必要がありますwine + Path to WineApp + FileToOpen
。概念を理解するために、スクリプトをより多くの変数に分割しますが、必ずしも機能するわけではありません。
#!/bin/bash
function set_wine_environment
{
WINEPREFIX='/disk1/.wine-ptgui'
WINEDLLOVERRIDES='mscoree=d'
PATHTOWINE='/software/wine/1.7.42/linux.centos6.i386/bin/wine'
PATHTOWINEAPP="/disk1/.wine-ptgui/drive_c/Program\ Files/PTGui/PTGui.exe"
}
# Check if we already have the wineprefix installed
if [ -d /disk1/.wine-ptgui ]; then
prefixExist=1
echo "$@"
set_wine_environment
# The path is now fully constructed here
# instead of inside the function, using
# string expansion.
${PATHTOWINE} ${PATHTOWINEAPP} "$@"
sleep 5
exit 0
else
echo "no wineprefix"
exit 1
fi
答え2
関数呼び出しではパラメータはまったく使用されません。そんな意味でしたか:
function run_wine
{
WINEPREFIX=/disk1/.wine-ptgui \
WINEDLLOVERRIDES=mscoree=d \
/software/wine/1.7.42/linux.centos6.i386/bin/wine \
/disk1/.wine-ptgui/drive_c/Program\ Files/PTGui/PTGui.exe "$@"
}
(最後に"$@"
)?