Visite também: Currículo ·  Efetividade BR-Mac

O que é LinuxDownload LinuxApostila LinuxEnviar notícia


Quais destes enganos comuns em scripts shell você comete?

Talvez não sejam propriamente enganos nem erros, mas este artigo faz um interessante trabalho de listar uma série de construções relativamente comuns em scripts shell, mas que incluem algum problema de portabilidade, desempenho, legibilidade ou mesmo estilo. Eu cometo vários!

Saiba mais (pixelbeat.org).


• Publicado por Augusto Campos em 2008-05-14

Comentários dos leitores

Os comentários são responsabilidade de seus autores, e não são analisados ou aprovados pelo BR-Linux. Leia os Termos de uso do BR-Linux.

    zer0c00l (usuário não registrado) em 14/05/2008 às 8:57 pm

    I don’t do shell screeeeepts, you insensitive clod!

    Eri Ramos Bastos (usuário não registrado) em 14/05/2008 às 9:07 pm

    Excelente artigo. Só não concordo em _não_ usar bashismos.
    Na minha opinião o Bash tem excelentes recursos que poder ser usados sem dó nem piedade.
    Só precisa de bom-senso de apostar o shebang pra /bin/bash ao invés de /bin/sh, como muita gente faz (e acaba tendo resultados desagradáveis quando usa Ubuntu, por exemplo, que aponta o /bin/sh pra /bin/dash)

    you insensitive clod!

    Tá melhorando o nível aqui. Até citação tá rolando. Quem vai começar com as analogias de carro? Mas posso estar errado… I’m new here. ;)

    Concordo com o colega acima. Não existem “bashismos”. Ou vc escolhe um interpretador de comandos padrão, ou não sai do lugar.
    Criar um script que seja “interoperável” entre vários interpretadores diferentes ao meu ver não tem aplicação alguma.

    set i=10 # tcsh

    i=10 # bash, zsh

    set i 10 # fish

    São a mesma coisa, mas em cada interpretador tem uma sintaxe diferente. Além do mais, quem ainda usa o sh (o shell padrão do unix, de 30 anos atrás)?

    Eu costumo escrever scripts em bash com o máximo que o bash venha a me oferecer. Desde expansão de variáveis, aritmética, e coisas do tipo.

    A maioria das distros linux e variantes Unix possuem o bash ou o csh, portanto não há problema algum em explorar ao máximo. Tirando o Ubuntu, que, como disse o colega acima, em versões anteriores trazia o interpretador dash (que eu não tenho a mínima idéia do que seja ;-)).

    Douglas Augusto (usuário não registrado) em 15/05/2008 às 5:20 am

    Se querem usar bashismos, que usem, mas o chamem de “Bash script”, não genericamente de “shell script”. Isto porque ‘shell’ não implica em Bash, em outras palavras, o Bash é um shell, mas shell não se limita ao Bash.

    Portanto entende-se para shell script comandos escritos conforme as especificações POSIX, e espera-se que rodem em todos os shells compatíveis com POSIX, dentre eles o enxuto e rápido Dash.

    Se você quer mais portabilidade/robustez ou não quer que seu script dependa de algum shell específico (embora livre nem sempre o Bash é a melhor escolha para um sistema), o melhor é seguir o POSIX, e um grande guia nesse sentido é o próprio Dash, onde não há “dashismos”.

    Gostei do artigo, interessante, bom para aprender alguns truques… Shell é mesmo aprender lendo, eu acabo copiando erros de outros scripts…

    GoblinX, um livecd brasileiro com base Slackware

    Douglas, para coisas mais básicas é perfeitamente possível escrever scripts portáveis. Um script que faça:

    cd /etc/
    sed s/ab/cd/g arquivo.txt

    Pode perfeitamente ser escrito em qualquer interpretador. Mas se vc quiser um script que exija algo mais, daí ou fica-se limitado ao básico que são as próprias ferramentas que o unix oferece, sem built-in algum do interpretador de comandos – não consigo escrever condições do tipo [ $i -lt $j -a $k -ne $z ] Pra mim é (( (i&ltj) && (k!=z) ))
    mesmo sabendo que não é algo portável, mas visivelmente mais lógico.

    Concordo quando diz: “chame bash script ao invés de shell script”. Mas discordo com relação ao dash. Quem foi que nventou aquela coisa? Durante o tempo q usei Ubuntu, percebia que ele era bem mais lento que o bash, mas não tinha coisas básicas que o bash tinha. Dash é padrão POSIX?

    Eri Ramos Bastos (usuário não registrado) em 15/05/2008 às 9:40 am

    O Dash é POSIX sim. E, na teoria, é pra ser mais rápido que o Bash.
    Mas não posso dar opinião sobre ele, já que nunca usei.

    No Ubuntu deu pano pra manga a discussão de colocar /bin/sh apontando pra /bin/bash – mas eu concordo com o argumento do pessoal do Ubuntu e também do Douglas. Se você fez um bash script, o shebang deve apontar corretamente para /bin/bash.

    []‘s

    O Dash, além de atender ao POSIX, depende de menos bibliotecas e executa scripts mais rapidamente. O número menor de dependências faz dele uma shell melhor adaptada a ser usada pelos processos do sistema, incluindo as do init e shutdown, e várias outras.

    Respondendo ao questionamento, ele foi portado para o Linux por Herbert Xu, a partir do ash (do NetBSD). O autor original do ash foi Kenneth Almquist.

    Para usar o bash, e não o dash, em um sistema que use o dash como o seu /bin/sh, basta declarar corretamente #!/bin/bash na primeira linha.

    cristo (usuário não registrado) em 16/05/2008 às 5:58 pm

    Gostei da iniciativa do Ubuntu de trocar o sh->Bash para sh->Dash pois obriga a ao invés de escrever o shebang com #!/bin/sh você acaba tendo que escrever sendo #!/bin/bash que torna a coisa mais oraganizada. Pois se escreveu em bash é para ser Bash e nunca shell

Este post é antigo (2008-05-14) e foi arquivado. O envio de novos comentários a este post já expirou.