Каждый раз, когда я открываю терминал, несколько команд уже выполняются

Я новичок и долгое время не использовал Linux. Теперь я больше не знаю, что я тогда делал, что каждый раз, когда я открываю терминал, выполняются 3 команды, которые мне больше не нужны и которые больше не работают, как раньше. Теперь мой вопрос: как я могу отключить, чтобы эти команды выполнялись каждый раз, когда я открываю терминал.

2
задан 13 June 2020 в 23:09

2 ответа

Проверьте файл .bashrc в вашем доме для команды source .

Этот файл читается при каждом запуске эмулятора терминала, и если он содержит источник , он запускает эти команды.

Вы можете проверить это запустив:

cat .bashrc | grep source
3
ответ дан 19 June 2020 в 21:25

TL; DR: diff /etc/skel/.bashrc ~ / .bashrc показывает изменения в ~ / .bashrc , и есть другие файлы beisdes ~ / .bashrc , которые могут вызвать описанную вами проблему.

Когда запускаются неожиданные команды при запуске оболочки Bash, проверка .bashrc , как говорит Христос Такаридис , часто обнаруживает проблему. Но иногда этого недостаточно. Можно проверить больше, чем просто команды source , и иногда вам нужно проверить больше файлов, чем просто .bashrc .

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

grep source ~/.bashrc

Также может быть полезно запустить:

grep -F '. ' ~/.bashrc

(Без -F , grep обрабатывает свой шаблон как регулярное выражение, а неэкранированный . в регулярном выражении соответствует любому символу, а не только литералу . .)

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

Если вы все же найдете файлы, полученные из источника, с помощью команды source или . (в Bash они являются синонимами), затем я рекомендую изучить их содержимое перед тем, как комментировать (с ведущим # ) или удалить источник или . строк. В них вы можете найти команду, которую ищете, или другую . Команды или source .

В частности, файл по умолчанию ~ / .bashrc в исходных кодах Ubuntu (с . ) файл ~ / .bash_aliases , если он существует. Обычно это используется как удобное место для определения псевдонимов, но любые команды Bash могут войти туда и будут выполняться.Иногда неожиданный результат оказывается из команд, которые не являются определениями псевдонимов, которые случайно были помещены в ~ / .bash_aliases . Вы также получите вывод в виде сообщений об ошибках, если определение псевдонима случайно искажено (хотя, если оно правильно сформировано, но текст, который он определен для расширения, неверен, вы не узнаете этого, пока не используете псевдоним ).

Другой способ проверить, что было добавлено или удалено из .bashrc , - это сравнить его с версией, которую система предоставляет вновь созданным учетным записям пользователей. Обычно это тот же файл, который вы использовали перед внесением изменений, хотя иногда, когда Ubuntu обновляется с одного выпуска до другого, этот файл изменяется ( без , вызывающего .bashrc ] файлы в домашних каталогах существующих пользователей, которые необходимо изменить). Это файл /etc/skel/.bashrc (поскольку содержимое каталога / etc / skel копируется в домашние каталоги вновь созданных учетных записей пользователей при создании учетных записей обычным способом), и вы можете увидеть различия между ним и вашим файлом .bashrc , запустив:

diff /etc/skel/.bashrc ~/.bashrc

В одном из вариантов этой проблемы ваш ~ / .bashrc может содержать команды вывода, расположенные очень высоко, так что они запускаются перед проверкой, является ли текущая оболочка интерактивной или нет. Многие неинтерактивные оболочки не запускают команды из ~ /.bashrc , но некоторые удаленные оболочки, которые в Ubuntu включают оболочку, которая запускает одну команду без взаимодействия через ssh и управляет sftp или scp соединение - так и сделаю. Поскольку большая часть того, для чего фактически используется .bashrc , не подходит для такой оболочки, значение по умолчанию .bashrc проверяет, является ли запущенная в данный момент оболочка интерактивной, и останавливается, если это не так. Если вы хотите, чтобы что-то работало в этих оболочках, это необходимо разместить до проверки интерактивности. Гораздо чаще вы этого не делаете, но все равно могли бы положить их туда. Команды перед проверкой интерактивности, которые вообще производят какой-либо вывод, обычно не позволяют sftp и scp работать для этой учетной записи, пока они не будут удалены.

(Или, что реже, эта проверка может быть удалена или изменена. За пределами Debian и Ubuntu по умолчанию .bashrc может содержать или не содержать такую ​​проверку. Этот ответ предназначен в первую очередь для пользователей Ubuntu .)

В другом варианте этой проблемы команды, которые вы ищете, не могут быть найдены в ~ / .bashrc и выполняются только в оболочках входа в систему, включая оболочку, которую вы получаете, когда вы войдите в систему на неграфической виртуальной консоли, а также когда вы ssh в машину, но не включает оболочку, которую вы получаете, когда открываете окно терминала (если вы не настроили приложение терминала для запуска оболочка входа в систему, или если это не система WSL в Windows 10). shopt login_shell сообщает вам, является ли интерактивная оболочка Bash, которую вы в данный момент используете, оболочкой входа в систему.

В этой ситуации вам следует проверить свой ~ / .profile , который используют оболочки входа:

diff /etc/skel/.profile ~/.profile

В Ubuntu у вас обычно не будет ~ / .bash_profile или ~ / .bash_login файл. Если один из них существует, он используется вместо из ~ / .profile , хотя может вызвать ~ /.profile , который также будет использоваться при поиске ~ / .profile .

По умолчанию в Ubuntu, ~ / .profile sources ~ / .bashrc , поэтому даже интерактивные оболочки входа запускают команды в ~ / .bashrc и простое наличие проблемы в оболочке входа в систему , а также в других оболочках не означает, что она обязательно находится где-то еще, кроме ~ / .bashrc .

Наконец, обратите внимание, что общесистемными аналогами ~ / .bashrc и ~ / .profile являются /etc/bash.bashrc и / etc / profile соответственно. Эти файлы редко модифицируются и редко должны быть изменены, но если вы их измените, они также повлияют на поведение запуска оболочки аналогичным образом.

2
ответ дан 19 June 2020 в 21:25

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

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