команда мусора, не найденная на запуске терминала удара

Я натыкался на проблему, которую я просто, может казаться, не выясняю. Когда я запускаю, мой терминал в ubuntu (14.04) I получают сообщение

sdfsdfsdi: command not found

Поскольку Вы видите, что просто похоже, что кто-то (возможно, самостоятельно) ударял по клавиатуре в разочаровании и затем случайно записал в некоторый сценарий, что удар читает на инициализации. Проблема, я не могу ни за что в жизни найти то, что читает удар сценария, когда это встречается с этим мусором. Я заглянул

~/.profile
~/.bashrc
~/.bash_profile
/etc/profile
/etc/bash.bashrc

и ни один из них, кажется, не имеет фразы мусора. Есть ли другие местоположения, которые колотят чтения от на запуске, который я могу проверить?

Спасибо!

Andrew

(Обратите внимание, что это не критическая проблема, больше просто незначительное раздражение).

1
задан 16 October 2014 в 23:22

2 ответа

Чтобы узнать, какие команды 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 "" заставляет оболочку завершать работу после инициализация завершена.

1
ответ дан 11 November 2019 в 12:33

Это агрессивно, но вы можете использовать самую старую технику отладки из книги: напечатайте материал, чтобы отметить, где что-то идет не так:

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

Это сузит область, где находится мусор, и тогда вы можете сфокусировать свой поиск.

0
ответ дан 11 November 2019 в 12:33

Другие вопросы по тегам:

Похожие вопросы: