caractere especial e parsing BUG - Bashscript

1
Failed to parse arguments: Argument to "--command/-e" is not a valid command: Text ended before matching quote was found for ". (The text was '"cpulimit')

isto é o que recebo quando executo o seguinte script no terminal

    #!/bin/bash
read -p "Which program u want to limit its processes?" ProgrameName
read -p "Which limitation percentage u want for it ?" limitationPercentage  

getAllPIDRunUnderThisProgram=$( ps -e | grep "$ProgrameName" | awk '{print ;}')
for i in $getAllPIDRunUnderThisProgram
   do
    gnomeTab+="  --tab -e \"cpulimit -p $i -l $limitationPercentage \" "  
   done

gnome-terminal $gnomeTab

ele não pode analisar o caractere de escape "\" que deve ser usado por causa das aspas duplas na linha 8 gnomeTab+=" --tab -e \"cpulimit -p $i -l $limitationPercentage \" " , então existe uma solução para usar as aspas duplas, pois elas são obrigatórias para serem usadas após --tab -e " some commands " e não para obter o problema de análise?

    
por Ahmed Zain El Dein 30.04.2013 / 18:27

1 resposta

3

Você pode alterar a primeira linha para

#!/bin/bash -xv

para fazer com que o shell mostre como ele interpreta os argumentos.

Em vez de escapar (o que leva a eval ), você deve usar arrays para acumular opções:

for i in $getAllPIDRunUnderThisProgram ; do
    gnomeTab+=(--tab -e "cpulimit -p $i -l $limitationPercentage")  
done

echo "${gnomeTab[@]}"
    
por choroba 30.04.2013 / 20:51