Bashスクリプトパラメータが関数に渡されていませんか? [閉鎖]

Bashスクリプトパラメータが関数に渡されていませんか? [閉鎖]

そのスクリプトを呼び出すときは、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

おすすめ記事