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

답변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 "$@"
}

(마지막으로 "$@")?

관련 정보