você está aqui: Home  → Arquivo de Mensagens Workshop Gratuito sobre Programação Shell Linux

Macetes diversos para shell Linux

Colaboração: Julio Cezar Neves

Data de Publicação: 25 de Fevereiro de 2005

Um lembrete rápido antes da dica do dia, as aulas do workshop gratuito sobre programação Shell Linux começam hoje, às 20h. Ainda dá tempo, se quiser se inscrever, clique aqui.


Segunda-feira é dia de estar de cabeça quente, com os bits de paridade do cérebro todos virados, então hoje vou dar diversas pequenas dicas:

Dica 1 : Repare esta seqüência de comandos no prompt:

/home/jneves> cd bin
-bash: cd: bin: No such file or directory
/home/jneves> CDPATH=/usr/local
/home/jneves> cd bin
/usr/local/bin
/usr/local/bin>

Com esse exemplo eu quis mostrar que a variável CDPATH atua como o PATH, sendo que esta última contém os diretórios que devem ser percorridos na procura de arquivos e a primeira contém os os diretórios que devem ser percorridos na procura por subdiretórios.

Para agilizar o meu lado, repare o conteúdo do meu CDPATH:

/home/jneves> echo $CDPATH
.:..:~

Desta forma, quando eu faço um cd, os subdiretórios serão pesquisados no diretório corrente, no seu diretório pai e no meu diretório home, nesta ordem.

Dica 2 : Já que falamos na variável PATH, que tal usarmos o comando tr para facilitar a legibilidade do seu conteúdo:

/home/jneves> echo $PATH
/bin:/usr/bin:/sbin:~:.
/home/jneves> echo $PATH | tr ':' '\n'
/bin
/usr/bin
/sbin
~
.

Neste exemplo o tr trocou os dois-pontos (:) por new-line (ENTER), facilitando a leitura do conteúdo da variável.

Dica 3 - Quando você executa diversos comandos encadeados em um pipe (|), o return code dado por echo $? reflete apenas o resultado de saída do último comando executado no pipe. O array PIPESTATUS, por sua vez, armazena em cada elemento o resultado respectivo de cada um dos comandos do pipe. ${PIPESTATUS[0]} tem o return code do primeiro comando, ${PIPESTATUS[1]} contém o return code do segundo, e assim por diante.

O exemplo a seguir mostra um script que executa um pipe de três comandos, e imprime o return code de cada um dos comandos:

/home/jneves> date | grep Wed | wc -l
/home/jneves> echo ${PIPESTATUS[*]}
0 1 0

Na última linha temos a impressão do array ${PIPESTATUS}: 0 (zero) indicando o sucesso do primeiro comando, 1 indicando que o grep falhou ao procurar pela cadeia Wed, e novamente 0 (zero) para o sucesso do comando wc -l.



Veja a relação completa dos artigos de Júlio Neves