Os argumentos do script Bash não são passados para a função? [fechadas]

0

Estou tentando passar os argumentos ao invocar um script bash para uma função definida nesse script. Na minha cabeça isso é trivial, mas na prática parece mais difícil.

O script é:

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

Eu invoco o script com

./ptgui -batch -x /folder/project.pts

e pode ver meus argumentos ecoados pela linha echo "$@ , mas os argumentos não parecem ser passados para a função, pois o programa é executado como se nenhum argumento tivesse sido dado. Então a execução do programa funciona, mas os argumentos não parecem ser passados.

No entanto, se eu executar no shell o comando chamado pela função 'run_wine' com argumentos, o programa será iniciado como seria de esperar, ou seja, -

$ 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

O comando acima no meu shell funciona bem.

Estou fugindo de algo incorretamente?

Edit: bash -x output

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
    
por Party Time 07.08.2015 / 00:34

2 respostas

2

Não estou garantindo que isso funcione, mas a questão aqui é que você não está construindo o caminho corretamente. O caminho total deve conter wine + Path to WineApp + FileToOpen . Eu dividi seu script em mais Variáveis para que o conceito faça sentido, não necessariamente trabalhando ...

#!/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
    
por 07.08.2015 / 01:58
2

Sua chamada de função não faz uso dos argumentos. Você quis dizer:

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

(com o "$@" no final)?

    
por 07.08.2015 / 00:43