У меня есть сценарий bash, который запускает ps
со списком таких команд:
comando="ps -o pid,pcpu,cmd -C \"$2\""
$ 2 должна быть переменной в такой форме: command1
или command1 command2 command3 ... commandn
Как я могу проверить эту переменную, чтобы избежать ошибок? Мне нужен элемент управления (с if), чтобы проверить шаблон.
РЕДАКТИРОВАТЬ: ps
можно назвать так:
ps -o pid,pcpu,cmd -C "command1 command2 ... commandn"
. Если кто-то назовет этот сценарий bash как script.sh -C " command1 command2"
, команда ps возвращает «НЕПРАВИЛЬНЫЙ СПИСОК». Я хочу избежать ps
ошибка и повторить мою ошибку перед запуском ps
команда.
Вам следует не помещать команды в переменные.
Если вас сбивают с толку пробелы, вы можете избавиться от них следующим образом:
ps -o pid,pcpu,cmd -C ${2// }
Это лишит все пробелы, поэтому, если какая-либо из ваших командных строк содержит пробелы, это разрушит их. Это приведет к удалению начальных и конечных пробелов и пробелов по обе стороны от запятых:
commands=${2/# } # leading space
commands=${command/% } # trailing space
commands=${command/, /,} # spaces after commas
commands=${command/ ,/,} # spaces before commas
ps -o pid,pcpu,cmd -C "$commands"
Если вы хотите вернуть ошибку вместо очистки и запуска ввода, просто сделайте это удаление пространства или другую очистку и проверьте, равен ли результат вводу. Если это не так, выведите ошибку.
Он может работать с циклом for
arguments="command1 command2 command3 command4 command5"
for arg in $arguments
do
ps -o pid,pcpu,cmd -C $arg
done
полученные результаты:
ps -o pid,pcpu,cmd -C command1
ps -o pid,pcpu,cmd -C command2
ps -o pid,pcpu,cmd -C command3
ps -o pid,pcpu,cmd -C command4
ps -o pid,pcpu,cmd -C command5
Не могли бы вы привести лучший реальный пример того, как это должно работать, чего вы ожидаете ... Мне это не кажется слишком ясным.
Чтобы вызвать его из командной строки, как я объяснил в комментарии, просто используйте $*
чтобы уловить все переданные аргументы.
for arg in $*
do
ps -o pid,pcpu,cmd -C $arg
done
затем назовите это так:
./test.sh command1 command2 command3 command4 command5 command6
и он будет запускать команду ps с каждым аргументом.