bash: BASH_XTRACEFD: 5: недопустимое значение для дескриптора файла трассировки - PullRequest
0 голосов
/ 03 июля 2019

Я хочу сделать то же самое, что и shell - Подавить трассировку выполнения bash (set -x) снаружи скрипта - Unix & Linux Stack Exchange 's one.

Когда я выполнял отладку Bash, иногда возникала команда (spinner 'Now loading... ' &), и команда делала вывод отладочной информации грязным, потому что команда использует цикл while, поэтому имеется большой объем вывода.

В этом случае я хочу подавить вывод команды чем-то вроде spinner 'Now loading... ' 5>/dev/null &.

Я искал, как это сделать, и нашел решение, которое BASH_XTRACEFD.

Но я пытаюсь определить переменную в командной строке, ошибка произошла следующим образом.

$ export BASH_XTRACEFD="5"
bash: BASH_XTRACEFD: 5: invalid value for trace file descriptor

Я предполагаю, что причина возникшей ошибки заключается в том, что файловый дескриптор закрыт или что-то ещенеправильно.но я понятия не имею, что нужно сделать, чтобы решить эту проблему.Есть идеи?

1 Ответ

0 голосов
/ 03 июля 2019

Пример, на который вы ссылаетесь, показывает правильный способ сделать это, который находится в одной строке перед созданием новой оболочки с помощью скрипта.

Ваша проблема в том, что вы в настоящее время делаете это в интерактивной оболочке, у которой нет дескриптора файла 5. Вы можете решить эту проблему, заменив оболочку и предварительно создав этот файловый дескриптор, если вы просто хотите отказаться от всего набора - х, тогда вы можете использовать

exec 5> export BASH_XTRACEFD=5 Это должно решить проблему, которую вы продемонстрировали, однако я чувствую, что вы просто пытаетесь перенаправить stderr, поэтому вместо этого сделайте

--> ls -l foo
ls: cannot access foo: No such file or directory
root@mybox[/tmp] Wed Jul 03 <11:17:46>
--> ls -l foo 2>/dev/null # Notice the 2>/dev/null after the command
root@mybox [/tmp] Wed Jul 03 <11:17:50>

И это подавит счетчик, если он пишет в stderr.

...