Вы не можете анализировать параметры с регулярными выражениями так, как вы кажется, хотят, потому что параметры передаются не в строке, а в списке строк. myscript --option foo bar - qux
имеет myscript
, - option
, foo
, bar
, -
и qux
как отдельные аргументы, ни один из них не содержит пробелов .
Использование цикла в bash.
case "$1" in
--option1)
shift
while [[ $# -ne 0 && "$1" != "--" ]]; do
option1_args+=("$1")
shift
done
(($# == 0)) || shift
done
Если производительность является такой большой проблемой, вам не следует использовать bash. Попробуйте вместо этого ksh - он бесплатный, доступен практически везде, даже если это не так. t установлен по умолчанию, и часто он значительно быстрее, чем bash. Если он все еще слишком медленный, вам понадобится более интересный язык программирования, такой как Perl, Python или Ruby.
Попробуйте это, но это сработает, только если открыта одна сессия экрана.
ps waux | grep screen$ | awk '{print $2}' | xargs pstree
Например
jeff@linux:~$ ps waux | grep screen$ | awk '{print $2}' | xargs pstree
screen───screen─┬─bash───top
├─bash───watch
└─bash───xargs───pstree
Если у вас было несколько экранных сессий, вы могли перебирать их следующим образом:
jeff@jlinux:~$ for pid in $(ps waux | grep screen$ | awk '{print $2}'); do pstree $pid; done
screen───screen───bash
screen───screen─┬─bash───top
├─bash───watch
└─bash───pstree