3.9. Shells

No FreeBSD, uma grande parte do trabalho do dia a dia é feito por interface de linha de comando, chamada de interpretador de comandos, ou shell. A principal função de uma shell é receber comandos por um canal de entrada e executá-los. Uma série de shells ainda possuem funções embutidas, o que ajuda a facilitar a realização de tarefas do dia-a-dia, como gerenciamente de arquivos, edição de linha de comando, macros de comandos e variáveis de ambiente. O FreeBSD vem com uma série de interpretadores de comandos, como o sh, chamado de Bourne Shell, e tcsh, A ``C-shell'' melhorada. Muitos outros interpretadores de comandos estão disponíveis na Coleção de Ports do FreeBSD, como o zsh e o bash.

Que shell utilizar? Trata-se meramente de uma questão de gosto. Se você é um programador C, se sentirá mais confortável com um interpretador de comandos similar à linguagem C, como o tcsh. Se você teve suas origens no Linux, ou é novo ao UNIX®, tenta experimentar o bash. O ponto é que cada interpretador de comandos possui propriedades únicas, que pode ou não funcionar corretamente em seu ambiente de trabalho, e também, outro ponto importante é sua liberdade de escolha para decidir qual e quando interpretador utilizar.

Uma das características mais comuns em interpretadores de comandos é completar nome de arquivos. Ao digitar as primeiras letras de um comando ou de um arquivo, você normalmente pode fazer com que a shell automaticamente complete o restante do comando ou arquivo, pressionando a tecla Tab no teclado. Aqui está um exemplo. Suponha que você tenha dois arquivos chamados foobar e foo.bar. Você quer apagar o foo.bar. Então o que você faria no teclado é: rm fo[Tab].[Tab].

O interpretador de comandos apresentaria como resultado algo similar à rm foo[BEEP].bar.

O [BEEP] é o sino do console, que indica que o interpretador de comandos não foi capaz de completar totalmente o nome do arquivo porque existe mais do que uma opções que coincide. Ambos, foobar e foo.bar começam com fo, mas a shell pode completar o nome do arquivo até foo. Se neste momento você digitar ., e pressionar Tab mais uma vez, a shell deve ser capaz de completar o restante do nome do arquivo para você.

Outra funcionalidade de um interpretador de comandos é o uso de variáveis de ambiente. Variáveis de ambiente são duplas variáveis de valores armazenados no espaço de ambiente da shell. Esse espaço de ambiente pode ser lido por qualquer programa chamado pelo intepretador, de forma que contenha uma série de configurações interpretadas pelo mesmo. Segue aqui uma lista de variáveis de ambiente comuns, e seus respectivos significados:

Variável Descrição
USER Nome do usuário logado no momento.
PATH Lista de diretórios, divididos por vírgula, indincando onde deve-se procurar por binários.
DISPLAY Nome de rede do terminal gráfico do X11 onde o mesmo deve se conectar, caso esteja disponível.
SHELL O interpretador de comandos atual.
TERM Nome do terminal do usuário. É usado para determinar as características do terminal.
TERMCAP Entrada com a base de dados de códigos de terminal, que realizam várias funções do console.
OSTYPE A espécie do sistema operacional em questão, por exemplo, FreeBSD.
MACHTYPE A arquitetura de CPU onde o sistema está sendo executado.
EDITOR Editor de texto padrão para o usuário.
PAGER O paginador de texto padrão para o usuário.
MANPATH Lista de diretórios separadaos por vírgulas que indicam onde as páginas de manuais devem ser buscadas.

Ajustar as variáveis de ambiente é tarefa que se difere de algumas formas entre as várias shells disponíveis. Por exemplo, nas shells baseadas na linguagem C, como o tcsh e o csh, você usaria o setenv para justar as variáveis de ambiente. Sobre um interpretador estilo Bourne shell como o próprio sh e o conhecido bash, você usaria o export para definir a variável de ambiente. Por exemplo, para definir ou modificar o valor da variável de ambiente EDITOR, sob csh ou tcsh, para definir a variável EDITOR com o valor /usr/local/bin/emacs, você faria algo como:

% setenv EDITOR /usr/local/bin/emacs

Enquanto sob uma Bourne shell seria:

% export EDITOR="/usr/local/bin/emacs"

Ainda é possível fazer a maioria dos interpretadores expandirem a variável, simplesmente adicionado o carácter $ na frente da própria variável. Por exemplo, echo $TERM imprimiria todo o conteúdo da variável $TERM, por quê o interpretador interpreta a variável $TERM como seu valor, e o passa para o echo.

Os interpretadores de comandos cuidam ainda de uma série de caracteres especiais, chamados de meta-caracteres, como representações especiais de dados. O caracter mais comum é o *, que representa qualquer conjunto de caracteres em um nome de arquivo. Os meta-caractéres especiais podem ser usados como substituição de arquivos. Por exemplo, o comando echo * tem resultado similar à saída de um ls pois o interpretador de comandos pega todos os arquivos que batem com * e os coloca na linha de comando de forma que o echo possa encherga-los.

Para evitar que a shell interprete estes caracteres especiais, pode-se utiliza-los como exclusão, inserindo uma barra invertinda (\) na frente deles. echo $TERM imprime em que terminal você está, enquanto echo \$TERM imprime $TERM exatamente.

3.9.1. Modificando sua Shell

A forma mais fácil de modificar seu interpretador de comandos é usar o comando chsh. Executar o chsh te colocará no editor definido na variável de ambiente EDITOR; se esta variável não estiver definida, você será colocado no vi. Modifique a linha ``Shell:'' de acordo com suas necessidades.

Você pode ainda usar o chsh com a opção -s; assim você pode ajustar sua shell sem entrar no editor. Por exemplo, se a intenção era modificar seu interpretador para usar o bash, o truque pode ser feito da seguinte forma:

% chsh -s /usr/local/bin/bash

Utilizar o chsh sem parâmetros e editar a shell também funcionaria.

Nota: O interpretador de comandos que você deseja utilizar deve estar listado no arquivo /etc/shells. Se você instalou o interpretador à partir da Coleção de Ports, isso já foi feito. Se você instalou na mão, você mesmo deve faze-lo.

Por exemplo, se você instalou o bash manualmente e o colocou no /usr/local/bin, você vai querer fazer o seguinte:

# echo "/usr/local/bin/bash" >> /etc/shells

Em seguida, execute novamente o chsh.

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.