bash 4.4.20(1) no RHEL 8.4.
set -x ; ./blarge ; set +x
funciona , é claro, mas há muito mais coisas para lembrar de remover quando terminar. E fica pegajoso se você estiver executando ssh, sudo, etc.
Assim, conforme mencionado no Assunto, existe alguma maneira de dizer set -x
para trabalhar apenas em uma linha, já que FOO=bar ./blarge
define a variável FOO como barge apenas para aquela execução de blarge?
declare Srv=s1.example.com
declare DB=a_db
declare Tables="-t table1 -t table2"
date +"%F %T, %a Starting"
set -x
vacuumdb --host=$Srv -j2 --dbname=$DB $Tables --analyze
set +x
date +"%F %T, %a Finished"
Você poderia usar um subshell:
Isso garante que
-x
seja definido apenas durante o subshell.Existem algumas abordagens que você pode usar se envolver tudo em uma função. Isso é útil porque você pode reutilizar a função para fazer várias chamadas de uma linha. Também permitiria um código mais limpo.
NB - Eles funcionam em
bash
, ymmv com outros shells.Observe o uso de
( )
em vez de{ }
, o que faz com que toda a função seja executada em um subshell - portanto, quaisquer alterações emset
(e variáveis) viverão e morrerão dentro da função.A declaração
local -
localiza quaisquer alterações feitasset
na função que contém. Esta seria uma abordagem útil se você quiser fazer alterações persistentes nas variáveis que estão disponíveis no escopo da função.Em ambos os casos, você chamaria assim:
Se você quiser habilitar
xtrace
um bloco mais longo de comandos, basta agrupar os comandos em sua própria função e chamá-los com axtrace
função.