LINUX.ORG.RU

[BASH] Выделить название команды из строки

 


0

0

Доброго времени суток! В BASH-скрипте принимаю в качестве опции команду с параметрами, которая в ходе скрипта будет выполнена. При этом будет измерено время выполнения этой команды, результат её выполнения и т.д. До того, как эта команда будет выполнена, она хранится в виде строки в переменной. Соответственно, выполняться она будет путём скармливания этой строки в eval. Нужно из этой строки выделить название команды, отбросив параметры. Поясню на примере:

JOB_COMMAND=
PARSED_ARGS=`getopt -o c: -l command: -- "$@"`
eval set -- "$PARSED_ARGS"
while true ; do
	case "$1" in
		#вот тут в JOB_COMMAND ложится например строка '"some command" fst_param sec_param'
		-c|--command) JOB_COMMAND="$2" ; shift 2 ;;
		--) shift ; break ;;
		*) echo "Options parsing error" ; exit 1 ;;
	esac
done

#вот тут надо из JOB_COMMAND выделить 'some command', отбросив при этом fst_param sec_param
????????
#PROFIT!!!
Как это сделать, если в названии команды нет пробелов, я представляю: всё, что от начала строки до первого пробела, и есть название команды. Реализуется соответственно при помощи простого и изящного перлового регэкспа /^(\S+)\s*/. Можно наверно и при помощи POSIXового регэскпа сделать, только сходу не могу представить, какой там регэксп нужен будет, опыта маловато. А вот какой POSIXовый регэксп (перловый тут уже не покатит, ибо запускаться скрипт вполне возможно будет на машинах без установленного перла) нужен будет, если в названии команды есть пробелы, заэкранированные бэкслэшем или выделением названия команды кавычками, я что-то никак представить не могу?

┌[~]
└> echo "command --first --second" | cut -d' ' -f1

?

GotF ★★★★★
()
Ответ на: комментарий от lazyklimm

> awk '{print $1}'



например



ты не понял чего он хочет.

eval «for x in $JOB_COMMAND;do break;done»
echo $x

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.