Continuando uma série de notas sobre
funções bash
menos conhecidas , mostrarei sete variáveis das quais você pode não estar ciente.
1) PROMPT_COMMAND
Você já deve estar ciente de como manipular o prompt de prompt para exibir várias informações úteis, mas nem todo mundo sabe que você pode executar um comando shell toda vez que exibir o prompt.
De fato, muitos manipuladores de prompt complexos usam essa variável para executar comandos para coletar as informações exibidas no prompt.
Tente executar isso em um novo shell e você verá o que acontece com a sessão:
$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'
2) HISTTIMEFORMAT
Se você executar o
history
no console, receberá uma lista de comandos executados anteriormente em sua conta.
$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '
Assim que essa variável é configurada, novos registros registram o tempo junto com o comando, para que a saída fique assim:
1871 I ran this at: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 I ran this at: 01/05/19 13:38:19 curl bbc.co.uk 1873 I ran this at: 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 I ran this at: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 I ran this at: 01/05/19 13:39:25 sudo su -
A formatação corresponde aos caracteres da data do homem.
3) CDPATH
Para economizar tempo na linha de comando, você pode usar essa variável para alterar diretórios tão facilmente quanto invocar comandos.
Como
PATH
, a variável
CDPATH
é uma lista de caminhos separados por dois pontos. Quando você executa o
cd
com um caminho relativo (ou seja, sem uma barra no começo), por padrão, o shell procura os nomes correspondentes na sua pasta local.
CDPATH
pesquisará nos caminhos que você deu para o diretório para onde deseja ir.
Se você instalar o
CDPATH
desta maneira:
$ CDPATH=/:/lib
e então digite:
$ cd /home $ cd tmp
você sempre estará em
/tmp
não importa onde esteja.
No entanto, tenha cuidado, porque se você não especificar uma pasta local (
.
) Na lista, não poderá criar nenhuma outra pasta
tmp
e acessá-la, como de costume:
$ cd /home $ mkdir tmp $ cd tmp $ pwd /tmp
Opa!
Isso é semelhante à confusão que senti quando percebi que a pasta local não estava incluída na variável
PATH
mais familiar ... mas você deve fazê-lo na variável PATH porque pode ser enganado executando um comando falso a partir de algum código baixado.
My é definido pelo ponto de partida:
CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt
4) SHLVL
Você já se perguntou se entrar na
exit
o levará para fora do shell bash atual para outro shell "pai" ou simplesmente fechará completamente a janela do console?
Essa variável controla o quão profundamente você está incorporado no shell bash. Se você criar um novo terminal, ele será definido como 1:
$ echo $SHLVL 1
Então, se você iniciar outro processo de shell, o número aumentará:
$ bash $ echo $SHLVL 2
Isso pode ser muito útil em scripts nos quais você não tem certeza se deve sair ou não ou para rastrear onde está aninhando.
5) LINENO
Além disso, para analisar o estado atual e a depuração, a variável
LINENO
é
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. Ao inserir linhas como
echo DEBUG:$LINENO
, você pode determinar rapidamente onde está o script (ou não).
6) REPLY
Se, como eu, você geralmente escreve código como este:
$ read input echo do something with $input
pode ser uma surpresa que você não precise se preocupar em criar uma variável:
$ read echo do something with $REPLY
Faz o mesmo.
7) TMOUT
Para não permanecer nos servidores de produção por muito tempo por motivos de segurança ou executar acidentalmente algo perigoso no terminal errado, a configuração dessa variável atua como proteção.
Se nada for inserido dentro do número de segundos definido, o shell será encerrado.
Ou seja, esta é uma alternativa para
sleep 1 && exit
:
$ TMOUT=1