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
.