-X çıktısı stdout'a değil, stderr'a gider. Ancak bu bile bir sorun olabilir - bol miktarda komut dosyası stderr içeriğine ve bazı durumlarda hata ayıklama ve stderr akışlarının birbirine karışması için dağınıklığa bağlı olacak.
Bash sürümleri> 4.1 farklı bir çözüm sunar: BASH_XTRACEFD ortam değişkeni, hata ayıklama akışını göndermek için kullanılacak bir dosya tanımlayıcı belirtmenize olanak tanır. Bu bir dosya veya boru ya da istediğiniz başka bir unix-y iyiliği olabilir.
# Use FD 19 to capture the debug stream caused by "set -x":
exec 19>/tmp/my-script.log
# Tell bash about it (there's nothing special about 19, its arbitrary)
export BASH_XTRACEFD=19
# turn on the debug stream:
set -x
# run some commands:
cd /etc
find
echo "Well, that was fun."
# Close the output:
set +x
exec 19>&-
# See what we got:
cat /tmp/my-script.log
Biraz daha uğraşarak, stdout ve / veya stdin akışlarında bir 'tee' yapmak ve bunları hata ayıklama çıktısıyla serpiştirmek gibi başka şeyler yapabilirsiniz, böylece günlüğünüz daha eksiksiz olur. Bununla ilgili daha fazla ayrıntı için bkz. Https://stackoverflow.com/questions/3173131/redirect-copy-of-stdout-to-log-file-from-within-bash-script-itself .
Bu yaklaşımın alternatiflere göre en büyük avantajı, hata ayıklama çıktısını stdout veya stderr içine enjekte ederek komut dosyanızın davranışında değişiklik riskini almamanızdır.