bash: Как выполнить многострочный результат другой команды
Некий набор grep-ов, sed-ов и awk-ов генерит последовательность строк команд. Их необходимо выполнить. Как это сделать?
Тривиальный пример: Код:
echo ls ; echo who Код:
ls Код:
`echo ls ; echo who` Код:
ls: who: No such file or directory Если команды в `` наколбасят ровно одну строку/команду, то все рабоает. Как их разделить на две команды? |
Незнаю как другие, я неуловил в вопросе что нужно зделать
|
shivtorov
действительно ничего не понятно :( если просто хотите выполнить две команды подряд, то выполняйте на здоровье Код:
ls; who; если что-то другое - напишите, но попонятней, pls |
Код:
'echo ls' ; 'echo who' |
В данном случае должно работать: 'echo ls;' ; 'echo who;'.
А вообще хотелось бы на сам скрипт посмотреть. |
Ситуация такая:
Поставил RedHat Enterprise Linux 3 в минимальной конфигурации. Потом решил доустановить X. Пришлось в одной консоли в vi открыть файлик comps.xml, в котором описаны все пакеты дистрибутива, а в другой консоли для каждого нужного мне пакеты рачками исполнять rpm -i ... Быстро понял, что это очень геморно и решил научиться-таки пользоваться базовами иниксовыми инструментами. Вот и сваял такую командочку: Код:
cat ../base/comps.xml | sed '0,/base-x/d' | sed '0,/packagelist/d' | sed '/packagelist/,$d' | grep mandatory | sed s/.*\"\>/"find . -name \""/ | sed s/\<.*/"-\[0-9]*\" -exec rpm -ivh --aid {} \\\;"/ Код:
find . -name "bitmap-fonts-[0-9]*" -exec rpm -ivh --aid {} \; Пробывал по совету Yura : Код:
cat ../base/comps.xml | sed '0,/base-x/d' | sed '0,/packagelist/d' | sed '/packagelist/,$d' | grep mandatory | sed s/.*\"\>/"\`find . -name \""/ | sed s/\<.*/"-\[0-9]*\" -exec rpm -ivh --aid {} \\\;\` ;"/ Код:
`find . -name "bitmap-fonts-[0-9]*" -exec rpm -ivh --aid {} \;` ; Как же мне все-таки запустить на исполнение мои find-ы? Я нашел только одно решение - сохранить их в файлик, сделать его исполняемым и запускать уже файлик. Этот вариант полностью работает, но это неспортивно, обходной маневр - а я то хочу начиться пользоваться базовами инструментами. Помогите запустить мои find-ы!!! |
>Потом решил доустановить X.
И ради этого надо так извращаться??????? |
...а не проще почитать доки по yum??? в Красной Шляпе оно вроде есть...
|
to BeerMan
to bdancer Как решить задачу обходным маневром я знаю (описывал его в своем посте). Меня интересует как решить задачу в лоб - в основном в учебных целях. Это ведь базовые инструменты и ими необходимо уметь пользоваться. to Модераторы Перебросьте, пожалуйста, эту тему в раздел программирование. Наверное, эта тема ближе к тому разделу. |
А попробовать добавить за строкой | sh или | bash
|
Кривовато конечно (вместо двух sed'ов одного бы хватило, но... :))), тока path на пути замени.
Код:
for package in `cat /path/comps.xml | sed '0,/base-x/d' | sed '0,/packagelist/d' | sed '/packagelist/,$d' | grep mandatory | sed 's/.*\">//' | sed 's/<\/.*//'`; |
Respect
Respect qt100 and bdancer
qt100 попал в точку - как раз то, что я и хотел получить. Respect! Вариант bdancer-а чуть глубже в программинг, но радует дополнительным фунционалом. Respect! Мой итоговый рабочий вариант (с учетом пожеланий bdancer-а) Код:
cat ../base/comps.xml | 1) sed <параметры> | sed <параметры> | sed <параметры> 2) sed -e <параметры> -e <параметры> -e <параметры> |
shivtorov
Я немного не то имел в виду, просто описал неправильно. Я про свой вариант и два последних sed'a (sed 's/.*\">//' | sed 's/<\/.*//'`;) которые вырезают название пакета, там точно одним regex'пом можно обойтись. >о различии в быстродействии двух вариантов 2-ой имхо быстрее ибо пайпов нет, хотя черт его знает. И мой вариант, имхо, быстрее ибо не плодит лишних процессов в виде запускания шелла для интерпретации команды. |
Время: 10:19. |
Время: 10:19.
© OSzone.net 2001-