[Programação Tcl/Tk] - Shell do Tcl/Tk

Avaliação do Usuário
PiorMelhor 

O Shell do Tcl/Tk

     Todos script Tcl/Tk será executado por um shell, ou seja, um programa que irá receber os comandos e então executá-los um a um.     Na grande maioria do tempo, o shell irá receber o nome de um arquivo de texto (ASCII) que deverá carregar na memória e então executar seu conteúdo.     Em poucos casos, o programador irá abrir o shell e então digitar os comandos individualmente e serão executados a medidade em que o programador confirmar (<ENTER>).

     O Tcl tem dois programas shell, são eles:

 

  • tclsh  - Este shell é usado para executar scripts tcl puros, ou seja, sem janelas gráficas.   Você poderá encontrá-lo em " /usr/bin/tclsh", nos terminais Linux, MacOSX, Solaris, AIX e derivados.
  • wish  - Este shell é reservado normalmente para script com janelas gráficas, ou seja, que usam a biblioteca Tk.  Você também poderá encontrá-lo em " /usr/bin/wish", no mesmo caso acima.

      Nos casos acima, citei o wish como um shell gráfico.    Porém, você poderá utilizá-lo para executar scripts Tcl puros.     Lembrando que ele irá consumir um pouco mais de recursos, que não serão utilizados pelo script Tcl.

     Para os ambientes da família Unix (Linux, BSD, MacOS, AIX, Solaris, etc.), você irá encontrar uma linha padrão nos scripts, e esta será sempre a primeira linha, quando existir.     Veja abaixo dois tipos de cabeçalhos que poderá encontrar no início dos scripts Tcl/Tk.

#!/bin/sh
# the next line restarts using wish\
exec tclkit "$0" "$@"

 ... o código do script virá na sequência...

ou

#!/bin/sh
# the next line restarts using wish \
exec wish "$0" ${1+"$@"}

 ... o código do script virá na sequência...

ou

#!/usr/bin/tclsh
# 

 ... o código do script virá na sequência...

ou

#!/usr/bin/wish
# 

 ... o código do script virá na sequência...

     Em todos os casos, o arquivo terá seus atributos modificados com o seguinte comando:

chmod +755 seuscript.tcl

ou

chmod +755 seuscript.sh

 

     Para os scripts que utilizam o "sh" como programa de carga, a extensão é habitualmente ".sh".    Para quem irá usar o shell do próprio Tcl, recomendo ".tcl".

 

NOTA: Por favor, faça um favor a você mesmo e ao administrador do seu ambiente, para não mencionar a empresa na qual você trabalha.  Nunca utiliza o modo "+777" para um arquivo de script.     Ajustar um arquivo de script com tal atributo, é assinar um atestado de incompetência, como programador e como profissional de tecnologia.

  

     Para aqueles com um nível de habilidades mais elevados, poderão criar seu próprio shell, que inclua recursos que ele precise, algo que deva ser específico.  Ex:

  • Carregar apenas scripts que tenha sido assinados digitalmente;
  • Carregar scripts que estejão em um servidor de rede (http, ftp, sftp, WebDav, etc.);
  • Arquivos empacotados em um tipo específico de arquivos (.zip, .tar, .tgz, etc.);

      Para os usuários da família Unix, poderão notar que os arquivos "tclsh" e "wish" são apenas links simbólicos para o arquivo original, normalmente nominados com a versão do software. Ex: "wish86", "tclsh86", "wish8.4", "tclsh8.4", etc.

     E finalmente para os usuários do Windows, bem, não há com o que se preocupar.     Ao instalar o interpretador "Tcl/Tk", o instalador irá vincular a extensão ".tcl" ao interpretador e nada do que foi dito acima se aplicará a você.     Não precisará mudar atributos de arquivos.    Porém manter o cabeçalho padrão do Unix é uma idéia inteligente.    Tendo em vista que a rota e praticamente fixa, colocar tal assinatura irá permitir que seu script seja executado sem problemas em outro sistema operacional.

     Lembrando que é prudente ter nas primeiras linha de seu script, os comandos necessário para detectar o sistema operacional em uso e eventualmente avisar ao usuário de alguma incompatibilidade do programa, antes de abortar a execução.     Seja sempre educado com seu usuário.

      Eu creio ter passado ao leitor uma idéia sobre a utilização do shell no Tcl/Tk.     Mais que isso, será ensinado nas lições futuras.