
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')
isso é 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 $1;}')
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 aspas duplas, pois elas são obrigatórias para serem usadas depois --tab -e " some commands "
e não para obter o problema de análise ?
Responder1
Você pode alterar a primeira linha para
#!/bin/bash -xv
para fazer o shell mostrar 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[@]}"