Output dari -x menuju ke stderr, bukan stdout. Tetapi bahkan itu bisa menjadi masalah - banyak skrip akan memiliki dependensi fungsional pada konten stderr, dan jenisnya berantakan untuk memiliki debug dan stream stderr dicampur bersama dalam beberapa kasus.
Versi Bash> 4.1 memang menawarkan solusi yang berbeda: variabel lingkungan BASH_XTRACEFD memungkinkan Anda menentukan deskriptor file yang akan digunakan untuk mengirim aliran debug. Ini bisa berupa file atau pipa atau kebaikan unix-y lainnya yang Anda suka.
# 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
Dengan sedikit mengutak-atik, Anda dapat melakukan hal-hal lain - seperti melakukan 'tee' pada stdout dan / atau stdin stream, dan interleave dengan output debug, sehingga log Anda lebih lengkap. Untuk detail lebih lanjut tentang ini, lihat /programming/3173131/redirect-copy-of-stdout-to-log-file-from-within-bash-script-itself .
Keuntungan besar dari pendekatan ini daripada alternatif adalah Anda tidak mengambil risiko perubahan pada perilaku skrip Anda dengan menyuntikkan output debug ke stdout atau stderr.