Não é possível acessar elementos de um array no zsh

0

Estou tentando escrever um script em zsh e preciso usar matrizes para atingir meu objetivo de maneira elegante. Depois de ler algumas informações na Net, tentei implementar e acessar os elementos do array da seguinte maneira:

### Script for running everything in screens ###
killall -15 screen ## We make sure that no screens are running for now
#bkgarr=(TopJets BosonJets DiBoson TTbar)
bkgarr=(1 2 3)

screen -dmS "MYSCREEN"
screen -S "MYSCREEN" -p 0 -X stuff 'echo "The array has ${#bkgarr[*]} of elements."^M'
screen -S "MYSCREEN" -p 0 -X stuff 'echo ${#bkgarr[0]}^M'

No entanto, isso não funcionou e a saída que obtive é a seguinte:

~/Summer_Students/nTupler_topness/tupleAnalyzer% echo "The array has ${#bkgarr[*]} of elements."
The array has 0 of elements.
~/Summer_Students/nTupler_topness/tupleAnalyzer% echo ${#bkgarr[0]}
0

Além disso, eu preciso ter um array de strings como o que foi comentado neste exemplo de trabalho mínimo. Eu ficaria feliz se alguém pudesse identificar meus erros e por que a matriz aparentemente não é armazenada na memória dos computadores.

Edição de código:

### Script for running everything in screens ###
killall -15 screen ## We make sure that no screens are running for now
#bkgarr=(TopJets BosonJets DiBoson TTbar)
bkgarr=(1 2 3)

screen -dmS "MYSCREEN"
screen -S "MYSCREEN" -p 0 -X stuff "$(typeset -p bkgarr)"$'\r'
#screen -S "MYSCREEN" -p 0 -X stuff 'bkgarr=(1 2 3)^M'
screen -S "MYSCREEN" -p 0 -X stuff 'echo "The array has ${#bkgarr[*]} of elements."^M'
screen -S "MYSCREEN" -p 0 -X stuff 'echo ${#bkgarr[0]}^M'

Saída posterior:

~/Summer_Students/nTupler_topness/tupleAnalyzer% declare -a bkgarr='([0]="1" [1]="2" [2]="3")'
declare: bkgarr: can't assign initial value for array
~/Summer_Students/nTupler_topness/tupleAnalyzer% echo "The array has ${#bkgarr[*]} of elements."
The array has 0 of elements.
~/Summer_Students/nTupler_topness/tupleAnalyzer% echo ${#bkgarr[0]}
0
~/Summer_Students/nTupler_topness/tupleAnalyzer%

Obrigado antecipadamente

    
por Vesnog 22.08.2014 / 12:54

1 resposta

1

A matriz é definida no shell interpretando seu script, não aquele executado na janela do terminal da tela.

Para passá-lo para a janela de tela zsh , tente:

screen -S "MYSCREEN" -p 0 -X stuff "$(typeset -p bkgarr)"$'\r'

Observe que ele enviará os caracteres de nova linha como caracteres de nova linha, não como retornos de carro. Isso deve ser bom com zsh embora (apenas as novas linhas serão inseridas na linha de comando, e não causa a aceitar a linha (que é tão bem)).

Se a sua matriz contiver ^C , " , \e caracteres ou outros caracteres especiais para o terminal ou zle ou screen's stuff , isso não funcionará. O mesmo se o seu shell não estiver pronto para receber essa entrada.

Você pode querer encontrar outra maneira de passar informações para o shell que está sendo executado dentro da janela, como por meio de um arquivo fifo que é verificado como parte do precmd hook.

    
por 22.08.2014 / 13:26