Só mudando a ordem dos cuts vc já elimina um pipe: KERNEL_DIR=/lib/modules/2.6.32-23-generic echo $KERNEL_DIR | cut -d- -f1 | cut -d. -f3
Usando sed, vc fica com um subprocesso só: sed -r 's/.*[0-9]+\.[0-9]+\.([0-9]+).*/\1/' <<< $KERNEL_DIR Se ficar com alguma dúvida com a expressão regular é só perguntar. Abraço --- Em ter, 6/7/10, ljgriso...@ymail.com <ljgriso...@ymail.com> escreveu: De: ljgriso...@ymail.com <ljgriso...@ymail.com> Assunto: [shell-script] Otmização de código Para: shell-script@yahoogrupos.com.br Data: Terça-feira, 6 de Julho de 2010, 18:08 Primeiramente gostaria de agradecer a todos por participar do fórum. Possuo o seguinte fragmento de código: luci...@debian:~/Desktop/martian-full-20080625$ cat Makefile KERNEL_DIR:=/lib/modules/$(shell uname -r) SUBLEVEL:=$(shell echo $(KERNEL_DIR) | cut -d. -f3 | cut -d. -f1 | cut -d- -f1) Na verdade esse é um fragmento de código de um arquivo Makefile do arquivo de instalação do meu WinModem a única coisa que essa parte do código faz é pegar o sublevel do kernel. Por exemplo suponhamos que meu Kernel seja 2.6.34 a variável SUBLEVEL iria assumir o valor 34. Bom, segundo as dicas do livro Programando em shell do Júlio eu não deveria usar tantos pipes, porém não tenho tanta intimidade assim com shell. Será que alguém tem alguma sujestão. Desde já fico muito agradecido. [As partes desta mensagem que não continham texto foram removidas]