Sete variáveis ​​Bash inesperadas

Continuando a série de notas sobre menos conhecido funções bash, vou mostrar sete variáveis ​​que você talvez não conheça.

1) PROMPT_COMMAND

Você já deve saber como manipular o prompt para mostrar várias informações úteis, mas nem todo mundo sabe que é possível executar um comando shell sempre que o prompt for mostrado.

Na verdade, muitos manipuladores de prompt complexos usam essa variável para executar comandos para coletar informações exibidas no prompt.

Tente executar isso em um novo shell e veja o que acontece com a sessão:

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

Se correr history no console, você receberá uma lista de comandos executados anteriormente em sua conta.

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

Depois que esta variável for definida, novas entradas registrarão o tempo junto com o comando, então a saída será semelhante a esta:

1871 Executei isso em: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Executei isso em: 01/05/19 13:38:19 curl bbc.co.uk 1873 Executei isso em : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Executei isso em: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Executei isso em: 01 /05/19 13:39:25 sudo su -

A formatação corresponde aos caracteres de man date.

3) CDPATH

Para economizar tempo na linha de comando, você pode usar esta variável para alterar diretórios com a mesma facilidade com que emite comandos.

como PATH, variável CDPATH é uma lista de caminhos separados por dois pontos. Quando você executa o comando cd com um caminho relativo (ou seja, sem barra inicial), por padrão o shell procura na sua pasta local por nomes correspondentes. CDPATH irá procurar nos caminhos que você forneceu o diretório para o qual deseja ir.

Se você instalar CDPATH assim:

$ CDPATH=/:/lib

e digite:

$ cd /home
$ cd tmp

então você sempre acabará em /tmp Não importa onde você está.

Porém, tenha cuidado, pois se você não especificar o local na lista (.), então você não poderá criar nenhuma outra pasta tmp e vá como de costume:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

Opa!

Isto é semelhante à confusão que senti quando percebi que a pasta local não estava incluída na variável mais familiar PATH... mas você precisa fazer isso em sua variável PATH porque pode ser levado a executar um comando falso a partir de algum código baixado.

O meu é definido pelo ponto de partida:

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

Você já se perguntou, digitando exit isso o levará do shell bash atual para outro shell "pai" ou apenas fechará completamente a janela do console?

Esta variável monitora o quão profundamente aninhado você está no shell bash. Se você criar um novo terminal, ele será definido como 1:

$ echo $SHLVL
1

Então, se você iniciar outro processo shell, o número aumenta:

$ bash
$ echo $SHLVL
2

Isso pode ser muito útil em scripts onde você não tem certeza se deve sair ou não, ou para controlar onde está aninhado.

5) LINENO

A variável também é útil para analisar o estado atual e depurar LINENO, que informa o número de comandos executados na sessão até o momento:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

Isso é usado com mais frequência ao depurar scripts. Inserindo linhas como echo DEBUG:$LINENO, você pode determinar rapidamente onde você está (ou não) no script.

6) REPLY

Se, como eu, você costuma escrever códigos como este:

$ read input
echo do something with $input

Pode ser uma surpresa que você não precise se preocupar em criar a variável:

$ read
echo do something with $REPLY

Isso faz a mesma coisa.

7) TMOUT

Para evitar permanecer em servidores de produção por muito tempo por motivos de segurança ou executar acidentalmente algo perigoso no terminal errado, definir esta variável atua como uma proteção.

Se nada for inserido por um determinado número de segundos, o shell será encerrado.

Ou seja, esta é uma alternativa sleep 1 && exit:

$ TMOUT=1

Fonte: habr.com

Adicionar um comentário