해당 스크립트를 호출할 때 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 "$@"
}
(마지막으로 "$@"
)?