Diálogo de lista do Zenity das variáveis

0

Eu tenho um script bash que se parece com isso:

column_names="--column=\"TargetDir\" --column=\"TargetPage_ID\" --column=\"TargetTitle\""
row="\"Target Dir 1\" 1 \"TargetTitle 1\""

echo "column_name is: [$column_names]"
echo "row is: [$row]"

zenity --list --title="list" $column_names $row

Mas quando eu executo isso, vejo um diálogo estranho:

Vocêpodeverqueháduaslinhasexibidasemvezdeuma(cadapalavranãoéidentificadacomovalordeumacoluna).Tambémestaéasaídanoterminal:

column_nameis:[--column="TargetDir" --column="TargetPage_ID" --column="TargetTitle"]
row is: ["Target Dir 1" 1 "TargetTitle 1"]

Mas quando copio valores impressos de column_name e row no terminal desta forma:

zenity --list --title="list" --column="TargetDir" --column="TargetPage_ID" --column="TargetTitle" "Target Dir 1" 1 "TargetTitle 1"

Eu recebo uma caixa de diálogo de lista verdadeira:

O que há de errado no roteiro?

    
por hasanghaforian 01.11.2016 / 16:55

1 resposta

3

Quando você está construindo uma linha de comando, sempre use matrizes. Isso evita muitos problemas ao citar:

column_names=(--column=TargetDir --column=TargetPage_ID --column=TargetTitle)
row=("Target Dir 1" 1 "TargetTitle 1")

Note como apenas as citações necessárias (para proteger os espaços) são deixadas agora.

Ao usar uma matriz a , "${a[@]}" expandirá os elementos exatamente como estão, sem causar problemas com espaço em branco. Então:

zenity --list --title="list" "${column_names[@]}" "${row[@]}"

Tente executar printf em vez de echo usando suas variáveis originais, você pode ver o que quebra:

printf "%s\n" $column_names $row

Eu nem vou tentar explicar o que quebrou na citação original. : arrepio:

    
por muru 01.11.2016 / 17:06