Com bash4.1 e acima, você pode fazer
BASH_XTRACEFD=7 ./script.bash 7> /dev/null
(também funciona quando bashé chamado como sh).
Basicamente, estamos dizendo bashpara produzir a xtracesaída no descritor de arquivo 7 em vez do padrão 2 e redirecionar esse descritor de arquivo para /dev/null. O número fd é arbitrário. Use um fd acima de 2 que não seja usado em seu script. Se o shell no qual você está inserindo esse comando for bashou yash, você pode até usar um número acima de 9 (embora possa haver problemas se o descritor de arquivo for usado internamente pelo shell).
Se o shell do qual você está chamando esse bashscript for zsh, você também pode:
(export BASH_XTRACEFD; ./script.bash {BASH_XTRACEFD}> /dev/null)
para que a variável seja atribuída automaticamente ao primeiro fd livre acima de 9.
Para versões mais antigas de bash, outra opção, se a opção xtraceestiver ativada com set -x(em oposição a #! /bin/bash -xou set -o xtrace), seria redefinir setcomo uma função exportada que não faz nada quando aprovada -x(embora isso interrompa o script se ele (ou qualquer outro bashscript que ele chama) usado setpara definir os parâmetros posicionais).
Gostar:
set()
case $1 in
(-x) return 0;;
(-[!-]|"") builtin set "$@";;
(*) echo >&2 That was a bad idea, try something else; builtin set "$@";;
esac
export -f set
./script.bash
Outra opção é adicionar uma interceptação DEBUG em um $BASH_ENVarquivo set +xantes de cada comando.
echo 'trap "{ set +x; } 2>/dev/null" DEBUG' > ~/.no-xtrace
BASH_ENV=~/.no-xtrace ./script.bash
Isso não funcionará quando set -xfor feito em um sub-shell.
Como o @ilkkachu disse, desde que você tenha permissão de gravação para qualquer pasta no sistema de arquivos, você deve pelo menos conseguir fazer uma cópia do script e editá-lo.
Se não houver lugar em que você possa escrever uma cópia do script, ou se não for conveniente fazer e editar uma nova cópia sempre que houver uma atualização no script original, você ainda poderá:
bash <(sed 's/set -x/set +x/g' ./script.bash)
Isso (e a abordagem de cópia) pode não funcionar corretamente se o script faz algo sofisticado $0ou variáveis especiais como $BASH_SOURCE(como procurar arquivos que sejam relativos ao local do próprio script), portanto, talvez seja necessário editar mais, como substitua $0pelo caminho do script ...
./script 2>some_file