Специальный символ и разбор ошибки - Bashscript
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')
это то, что я получаю, когда запускаю следующий скрипт в терминале
#!/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
он не может разобрать escape-символ "\", который должен использоваться из-за двойной кавычки в строке 8 gnomeTab+=" --tab -e \"cpulimit -p $i -l $limitationPercentage \" "
, так есть ли решение использовать двойные кавычки, так как они являются обязательными для использования после --tab -e " some commands "
а не получить проблему разбора?
1 ответ
Решение
Вы можете изменить самую первую строку на
#!/bin/bash -xv
чтобы оболочка показала вам, как она интерпретирует аргументы.
Вместо того, чтобы убежать (что приводит к eval
), вы должны использовать массивы для накопления опций:
for i in $getAllPIDRunUnderThisProgram ; do
gnomeTab+=(--tab -e "cpulimit -p $i -l $limitationPercentage")
done
echo "${gnomeTab[@]}"