Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Bash novo Complete , Notas de estudo de Análise de Sistemas de Engenharia

Explore a última versão do grande Bourne-again shell. Apesar da maturidade do Bash, seus desenvolvedores continuam aprimorando-o. A versão 4 do shell está cheia de novidades. por Bernhard Bablok e Nils Magnus.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 27/01/2010

ednaldo-miranda-6
ednaldo-miranda-6 🇧🇷

4

(1)

38 documentos

1 / 6

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
58 http://www.linuxmagazine.com.br
ANÁLISE
Explore a última versão do grande Bourne-again shell
Bash novo
Apesar da maturidade do Bash, seus
desenvolvedores continuam aprimorando-o.
A versão 4 do shell está cheia de novidades.
por Bernhard Bablok e Nils Magnus
A
pesar da competição recente
por parte de poderosas alter-
nativas como o Zsh
[1]
, o
Bourne-again shell (Bash)
[2]
ain-
da é o rei do pedaço no console
do GNU/Linux. O Bash, que pode
ser usado de forma interativa, tam-
bém serve como uma linguagem de
script simples e prática. O Bash faz
parte do esqueleto de todo sistema
GNU/Linux – mais um motivo para
investigar os benefícios de adotar a
nova versão 4, lançada em fevereiro
de 2009.
Por que não?
Em sistemas em produção, talvez
seja mais recomendável avaliar se
é realmente necessário atualizar o
Bash para sua nova versão. Por um
lado, as principais distribuições cer-
tamente difundirão a nova versão por
meio de suas atualizações, então o
novo Bash fatalmente vai chegar ao
seu sistema mais cedo ou mais tarde.
Programadores e usuários avançados,
por outro lado, gostam de usufruir
os benefícios oferecidos por novas
versões o mais rápido possível.
Quem desejar já se familiarizar
com o shell principal da maioria das
distribuições do futuro certamente
gostará de passar algum tempo com
o Bash 4 já.
A tabela 1 mostra um resumo de
alguns novos recursos importantes;
para uma listagem completa, verifi-
que o arquivo
NEWS
na documentação
do Bash. Este artigo levanta algumas
das mudanças mais importantes.
Linha de comando
Usuários da linha de comando apre-
ciarão algumas extensões inconspí-
cuas, mas muito úteis, incorporadas
ao novo Bash. Por exemplo, a string
**
é expandida para uma lista de
arquivos e caminhos sob o diretório
atual, de forma semelhante ao co-
mando externo
find
. Porém, os usuá-
rios precisam ativar esse recurso por
meio do comando
shopt -s globstar
.
Os desenvolvedores agora ado-
taram uma técnica mais amigável
para um dos maiores mistérios do
Bash: o redirecionamento da saída
de erro padrão. Em vez do mantra
2>&1 1>arquivo
, agora os usuários po-
dem usar simplesmente
&> >arquivo
para redirecionar as saídas padrão e
de erro para um único arquivo. O
atalho
|&
, que redireciona o erro
padrão de um comando para um
pipe, é outra novidade útil.
Vetores associativos
A crença popular reza que scripts
Bash criam muitos processos, que
acabam prejudicando o desempe-
nho. Mas muitos dos aplicativos
simples que costumavam ser usados
com o Bash, incluindo
sed
,
grep
,
basename
e
dirname
, já não são mais
necessários; o Bash realiza essas
tarefas tão rápido quanto qualquer
outra linguagem de script com fer-
ramentas embutidas. Apesar desses
avanços, os programadores Bash
continuam com olhares invejosos a
Perl e Python, ambos com estruturas
de dados mais versáteis.
Em sua versão 4, o Bash final-
mente acrescenta a seus vetores uni-
dimensionais os vetores associativos
(semelhantes aos hashes em Perl e
dicionários em Python). Para muitos
programadores, essa mudança, por si
só, já é motivo suficiente para ado-
tar a nova versão, pois ela oferece
uma solução bem mais elegante a
vários problemas. Por exemplo, os
desenvolvedores podem usar textos
arbitrários como índices de vetores
associativos em vez de apenas intei-
ros. A listagem 1 mostra um exemplo.
A listagem 2 contém um script
que ordena arquivos em diretórios
yewkeo, 123RF
Complete
Complete
a sua coleção
Mais
informações
Site:
www.linuxmagazine.com.br
Tel: 11 4082-1300
O objetivo da coleção é trazer
conhecimento confi ável e
de alto nível sempre com
enfoque prático e voltado para
a utilização do sistema Linux
e de outras tecnologias livres.
pf3
pf4
pf5

Pré-visualização parcial do texto

Baixe Bash novo Complete e outras Notas de estudo em PDF para Análise de Sistemas de Engenharia, somente na Docsity!

58 http://www.linuxmagazine.com.br

ANÁLISE Explore a última versão do grande Bourne-again shell Bash novo

Apesar da maturidade do Bash, seus

desenvolvedores continuam aprimorando-o.

A versão 4 do shell está cheia de novidades.

por Bernhard Bablok e Nils Magnus

A pesar da competição recente por parte de poderosas alter nativas como o Zsh [1] , o Bourne-again shell (Bash) [2] ain da é o rei do pedaço no console do GNU/Linux. O Bash, que pode ser usado de forma interativa, tam bém serve como uma linguagem de script simples e prática. O Bash faz parte do esqueleto de todo sistema GNU/Linux – mais um motivo para investigar os benefícios de adotar a nova versão 4, lançada em fevereiro de 2009. Por que não? Em sistemas em produção, talvez seja mais recomendável avaliar se é realmente necessário atualizar o Bash para sua nova versão. Por um lado, as principais distribuições cer tamente difundirão a nova versão por meio de suas atualizações, então o novo Bash fatalmente vai chegar ao seu sistema mais cedo ou mais tarde. Programadores e usuários avançados, por outro lado, gostam de usufruir os benefícios oferecidos por novas versões o mais rápido possível. Quem desejar já se familiarizar com o shell principal da maioria das distribuições do futuro certamente gostará de passar algum tempo com o Bash 4 já. A tabela 1 mostra um resumo de alguns novos recursos importantes; para uma listagem completa, verifi que o arquivo NEWS na documentação do Bash. Este artigo levanta algumas das mudanças mais importantes. Linha de comando Usuários da linha de comando apre ciarão algumas extensões inconspí cuas, mas muito úteis, incorporadas ao novo Bash. Por exemplo, a string ****** é expandida para uma lista de arquivos e caminhos sob o diretório atual, de forma semelhante ao co mando externo find. Porém, os usuá rios precisam ativar esse recurso por meio do comando shopt -s globstar. Os desenvolvedores agora ado taram uma técnica mais amigável para um dos maiores mistérios do Bash: o redirecionamento da saída de erro padrão. Em vez do mantra 2>&1 1>arquivo , agora os usuários po dem usar simplesmente &> >arquivo para redirecionar as saídas padrão e de erro para um único arquivo. O atalho |& , que redireciona o erro padrão de um comando para um pipe, é outra novidade útil. Vetores associativos A crença popular reza que scripts Bash criam muitos processos, que acabam prejudicando o desempe nho. Mas muitos dos aplicativos simples que costumavam ser usados com o Bash, incluindo sed , grep , basename e dirname , já não são mais necessários; o Bash realiza essas tarefas tão rápido quanto qualquer outra linguagem de script com fer ramentas embutidas. Apesar desses avanços, os programadores Bash continuam com olhares invejosos a Perl e Python, ambos com estruturas de dados mais versáteis. Em sua versão 4, o Bash final mente acrescenta a seus vetores uni dimensionais os vetores associativos (semelhantes aos hashes em Perl e dicionários em Python). Para muitos programadores, essa mudança, por si só, já é motivo suficiente para ado tar a nova versão, pois ela oferece uma solução bem mais elegante a vários problemas. Por exemplo, os desenvolvedores podem usar textos arbitrários como índices de vetores associativos em vez de apenas intei ros. A listagem 1 mostra um exemplo. A listagem 2 contém um script que ordena arquivos em diretórios yewkeo, 123RF

Bash 4 | ANÁLISE Linux Magazine #58 | Setembro de 2009 Tabela 1: Principais mudanças Mudança Descrição Substrings A extensão para parâmetros de posição suporta o desvio zero PID O PID do shell atual está disponível na variável BASHPID autocd Suporta navegação rápida por meio do nome do diretório checkjobs Verifica e relata trabalhos (jobs) ativos ou parados na saída read Atribui entradas parciais a variáveis e mantém seus valores mesmo que o comando te- nha seu tempo expirado mapfile Facilita o processamento de arquivos command_not_found_handle O Bash 4 chama essa função caso não consiga encontrar um comando globstar Usa ****** para realizar buscas recursivas ao longo de múltiplos diretórios Chaves A extensão cria uma lista de valores com zeros na frente Saída de erro padrão (^) Em vez de 2>&1 1>arquivo , o Bash agora suporta &> >arquivo Saída de erro padrão Da mesma forma, |& substitui 2>&1 | case Agora o Bash 4 suporta ;; , ;& e ;;& para terminar um case. O primeiro processa incon- dicionalmente as instruções do próximo grupo; o segundo verifica mais uma vez e, se adequado, continua processando o próximo grupo. Expansão variável Os operadores ^ e , alteram para caixa alta ou baixa Conversão automática (^) declare -u e declare -l convertem automaticamente para caixa alta ou baixa ao atri- buir valores Vetores associativos Os índices podem ser strings: $idade[“fulano”] coproc Cria processos assíncronos Seleção O comando read -t 0 -u fd verifica se o descritor de arquivo fd fornece dados

CompleteComplete

a sua coleção

Mais informações Site: www.linuxmagazine.com.br Tel: 11 4082-

O objetivo da coleção é trazer

conhecimento confiável e

de alto nível sempre com

enfoque prático e voltado para

a utilização do sistema Linux

e de outras tecnologias livres.

Bash 4 | ANÁLISE Linux Magazine #58 | Setembro de 2009 Quadro 1: Entrevista com o desenvolvedor do Bash 4 Chet Ramey Chat Ramey é gerente do Grupo de Segurança e Engenharia de Redes da divisão de serviços de TI da Case Western Reserve University. Ele é o mantenedor do Bash desde 1990. A Linux Magazine fez algumas perguntas a ele com relação à última versão do Bash. A comunidade do Software Livre não via uma nova ver- são do Bash há algum tempo. Alguns dizem que a ver- são 3.2 era adequada para praticamente todas as tare- fas necessárias. Então, por que algo novo? Fico feliz que as pessoas tenham uma opinião tão boa sobre o Bash 3.2. Eu não gosto de lançar novas ver- sões com muita frequência, pois o shell é muito bási- co para vários distribuidores, mas já estava na hora. O Bash 4.0 oferece diversos recursos novos (normalmen- te eu não incluo grandes recursos novos em versões de atualização), várias correções de falhas que não en- traram como patches no 3.2, e mais funcionalidades para os recursos já presentes. Quais os três avanços ou novos recursos que você acha mais interessantes? Vejamos. Essa é difícil, porque há várias que são boas.

  1. Vetores associativos;
  2. A correção para o último trecho incompatível com Posix. O shell não exige mais os parênteses balan- ceados ao processar substituições de comandos no estilo $(...) (por exemplo, ao processar uma instru- ção case dentro de uma substituição de comando). Estou empolgado com isso porque foi, certamente, a parte mais complicada para implementar. Não foi fácil com um parser gerado pelo yacc.
  3. As melhorias possíveis com o bind -x. Ao execu- tar um comando associado a uma sequência chave com bind -x , esse comando terá acesso ao buffer do readline e à posição atual do cursor e poderá al- terá-la. Uma função de shell poderia chamar um pro- grama externo para rearranjar as palavras na linha de comando, por exemplo, e fazer com que se refletis- sem no buffer de edição. Acho que esse recurso ain- da não foi muito usado, mas há várias possibilidades. O Bash 4 acrescentou vários novos recursos para fa- cilitar a programação. Você acha que ele já consegue competir com linguagens como Perl e Python? Acho que Perl e Python são linguagens mais sofistica- das, pois têm muito mais funções embutidas. Shells em geral são feitas para “grudar” programas externos ou funções de shell, além de oferecerem um ambien- te para facilitar essas tarefas. Porém, é possível escre- ver programas bastante complexos usando shell: veja o bash debugger, por exemplo. O Bash 4 também acrescentou diversos novos recur- sos para usuários da linha de comando. Agora ele está pronto para competir com shells especializadas nisso, como o Zsh? Acho que sim. O Bash talvez não tenha tantas funcio- nalidades embutidas, mas acho que oferece ferramen- tas suficientes para torná-lo um ambiente interativo tão bom quanto o Zsh. Há algumas discussões sobre estilos de programação e uso de recursos em shell scripts. Enquanto alguns tradicionalistas exigem compatibilidade com o Bourne shell, outros usam inúmeros recursos do Bash. Qual o seu ponto de vista? E a compatibilidade com o Bash 3.2? Você recomenda adotar o 4.0 imediatamente ou deixá-lo em paralelo com o 3.2 por certo tempo? Acho que depende dos seus objetivos. É fato que quando pedem “compatibilidade total com o Bourne shell”, referem-se à versão do sh presente em suas máquinas. Há diferentes versões do Bourne shell: v7, SVR2, SVR3, SVR4, SVR4.2... E fornecedores distintos acrescentam diferentes conjuntos de recur- sos à mesma versão do Bourne shell. É difícil des- cobrir exatamente o que se quer dizer com “Bourne shell original”. Para quem se interessar em escrever scripts portáveis, eu sugeriria seguir o padrão Posix. Ele pode ser consi- derado uma linha de base que todos os shells padrão implementam. Muitos – senão todos – fornecedores in- cluem um shell que obedece ao Posix. E se o seu for- necedor não incluir um, o Bash é compatível com pra- ticamente todas as plataformas existentes. Com relação à retrocompatibilidade com o Bash 3.2, tentei mantê-la ao máximo. Em certos locais, achei que o comportamento do Bash 3.2 era errado e o corrigi, sacrificando a retrocompatibilidade. Também existe a noção do “nível de compatibilidade” do shell, que pre- serva explicitamente certos comportamentos antigos quando ativado (veja as opções compat31 e compat do Bash). Creio que o nível de compatibilidade com o Bash 3.2 é bem alto e não deveria afetar a portabilida- de dos scripts. Acho que a compatibilidade é suficiente para os usuá- rios atualizarem para o Bash 4.0 imediatamente e gra- dativamente acostumarem-se com os novos recursos.

62 http://www.linuxmagazine.com.br

ANÁLISE | Bash 4 O primeiro comando converte a primeira letra para caixa alta e imprime Sim. O segundo converte todas as letras, portanto retorna SIM. Se for necessário converter para caixa baixa, podese usar: foo=SIM echo ${foo,} echo ${foo,,} A sintaxe ${Var^Padrão} suporta substituições ainda mais complexas. Co-processos e listas A maioria dos fabricantes de hardware atuais oferecem processadores com múltiplos núcleos, e já começam a aparecer técnicas para explorar essas funcionalidades. O Bash 4 permite ao programador executar o que se chama de “coprocessos”: coproc pipes comando Este comando retorna os descri tores de entrada e saída padrão do comando nas variáveis pipes[0] e pipes[1]. O processo principal do Bash os utiliza para se comunicar com o co processo, o que é parti cularmente útil para shell scripts que tratam com processamento paralelo [5]. Listas de valores automáticos, ou expansões de chaves, já existem há tempos, mas eram desconhecidas pela maioria dos usuários: o comando echo {5..15} conta do primeiro até o último número. Muitos programa dores Bash ainda usam o programa externo seq para isso: echo $(seq -s “ “ 5 15) O comando seq não apenas é mais lento, como seu resultado é mais difícil de ler. Porém, se for preciso ordenar esse tipo de saída, as versões anteriores do Bash não ajudavam, pois eram incapazes de inserir um zero à frente dos números menores que dez. O Bash 4 já faz isso: echo {05..15} A nova versão da shell padrão do GNU/Linux oferece alguns recursos úteis para os programadores e fãs da linha de comando. Apesar de algu mas pequenas incompatibilidades, o mantenedor do Bash incentiva os usuários a fazer a atualização (con fira a entrevista no quadro 1 ). A nova versão do Bash não é exa tamente magra – o binário agora ocupa 730 KB, em lugar dos 590 KB da versão anterior. Ele é mensuravel mente, mas não perceptivelmente, mais lento; os tempos de execução mais longos dificilmente devem ser problemáticos em hardwares atuais. Para usar as novas funções hoje, é preciso ter controle total sobre o ambiente para substituir todo o Bash. Em algums scripts, talvez seja preciso consultar as variáveis de ambiente BASH_VERSION e BASH_ VERSINFO para se assegurar da ver são em execução. Caso a versão não seja a 4, simplesmente termi ne o script graciosamente e emita uma mensagem de erro explicando o motivo. n Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em [email protected] Este artigo no nosso site: http://lnm.com.br/article/ Listagem 4: Técnica antiga para processar arquivos 01 #!/bin/bash 02 03 inputFile=”$1” 04 i= 05 while read line; do 06 lines[$i]=”$line” 07 let i++ 08 done < “$inputFile” 09 10 # Processamento das linhas... Listagem 5: Nova técnica para processar arquivos 01 #!/bin/bash 02 03 inputFile=”$1” 04 mapfile - n 0 lines < “$inputFile” 05 06 # Processamento das linhas... Mais informações [1] Zsh: http://www.zsh.org [2] Bash: http://tiswww.case.edu/php/chet/bash/bashtop.html [3] Bernhard Bablok, “Shell paralelo”: http://lnm.com.br/article/