Я натыкался на проблему, которую я просто, может казаться, не выясняю. Когда я запускаю, мой терминал в ubuntu (14.04) I получают сообщение
sdfsdfsdi: command not found
Поскольку Вы видите, что просто похоже, что кто-то (возможно, самостоятельно) ударял по клавиатуре в разочаровании и затем случайно записал в некоторый сценарий, что удар читает на инициализации. Проблема, я не могу ни за что в жизни найти то, что читает удар сценария, когда это встречается с этим мусором. Я заглянул
~/.profile
~/.bashrc
~/.bash_profile
/etc/profile
/etc/bash.bashrc
и ни один из них, кажется, не имеет фразы мусора. Есть ли другие местоположения, которые колотят чтения от на запуске, который я могу проверить?
Спасибо!
Andrew
(Обратите внимание, что это не критическая проблема, больше просто незначительное раздражение).
Чтобы узнать, какие команды bash
запускаются при запуске и из какого файла взяты эти команды, запустите:
PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>&2
Вывод длинный, но источник надеюсь, тарабарщина будет ясна.
Объяснение:
PS4 = '+ $ BASH_SOURCE>'
При создании трассировки выполнения bash
добавит к каждой строке расширение PS4
. Здесь мы заставляем PS4
отображать исходный файл, который читается.
BASH_XTRACEFD = 7
Это отправляет трассировку выполнения на 7
, который является файловым дескриптором, выбранным в надежде что это тот, с которым файлы запуска bash
не будут связываться.
bash -xl
Это запускает bash с параметрами -x
, что вызывает все команды для отображения с приглашением PS4
и -l
, которое указывает bash
рассматривать это как оболочку входа в систему. Если вы не получаете тарабарщину в оболочках входа в систему, попробуйте без -l
.
7> & 2
Это перенаправляет вывод трассировки обратно в stderr для отображения на терминале.
На основе комментария Гейры в этой версии добавлены три улучшения:
PS4='+ $BASH_SOURCE:$LINENO:' BASH_XTRACEFD=7 bash -xlic "" 7>&2
Здесь есть три уточнения: (1) приглашение PS4 теперь также отображает номер строки и имя файла, (2) -i
делает оболочку интерактивной, в дополнение к -l
, который сделал ее оболочкой входа в систему, и (3) -c ""
заставляет оболочку завершать работу после инициализация завершена.
Это агрессивно, но вы можете использовать самую старую технику отладки из книги: напечатайте материал, чтобы отметить, где что-то идет не так:
sudo tee -a /etc/profile <<<'echo /etc/profile'
sudo tee -a /etc/bash.bashrc <<<'echo /etc/bash.bashrc'
tee -a ~/.profile <<<'echo ~/.profile'
tee -a ~/.bashrc <<<'echo ~/.bashrc'
tee -a ~/.bash_aliases <<<'echo ~/.bash_aliases'
bash -l
Это сузит область, где находится мусор, и тогда вы можете сфокусировать свой поиск.