每次我打开终端时,都会执行几个命令

每次我打开终端时,都会执行几个命令

我是一名初学者,很久没有使用 Linux 了。现在我不再知道我当时做了什么,每次打开终端时都会执行 3 条命令,这些命令我不再需要,也不再像以前那样起作用了。现在我的问题是:如何关闭每次打开终端时执行这些命令的功能。

答案1

检查目录.bashrc中的文件中home是否存在source命令。

每次终端仿真器启动时都会读取此文件,如果该文件包含,source则会运行这些命令。

您可以通过运行以下命令进行检查:

cat .bashrc | grep source

答案2

总结: diff /etc/skel/.bashrc ~/.bashrc显示对 的更改~/.bashrc,并且还有其他文件~/.bashrc可能产生您所描述的问题。

当你启动 Bash shell 时运行意外命令时,检查.bashrc 正如克里斯托斯·塔卡里迪斯所说通常会揭示问题。但有时这还不够。除了source命令之外,还有更多需要检查的内容,有时您需要检查的文件不仅仅是.bashrc

Bash shell 内置命令source也可以拼写为.(这实际上是其更常见的拼写),因此除了:

grep source ~/.bashrc

运行以下命令可能也会有帮助:

grep -F '. ' ~/.bashrc

(如果没有-F,该grep命令会将其模式视为正则表达式,并且.正则表达式中的未转义字符会匹配任何字符,而不仅仅是文字.。)

但是,即使在 后面有文字空格.(如图所示),也可能会产生一些误报。

如果您确实找到了使用命令source.命令(在 Bash 中它们是同义词)的文件,那么我建议在注释掉(以 开头#)或删除source.行之前检查其内容。在其中,您可能会找到您要查找的命令,或者您可能会找到其他.source命令。

具体来说,~/.bashrcUbuntu 中的默认文件源(带有.)该文件~/.bash_aliases(如果存在)。通常,这被用作定义别名的方便位置,但任何 Bash 命令可以进入那里并运行。有时意外的输出结果来自不是别名定义的命令,这些命令被意外地放入 中~/.bash_aliases。如​​果别名定义意外地格式错误,您还会以错误消息的形式获得输出(尽管如果它格式正确但定义为扩展的文本是错误的,您直到实际使用别名时才会知道这一点)。

检查添加或删除内容的另一种方法.bashrc是将其与系统为新创建的用户帐户提供的版本进行比较。通常,这与你修改之前的文件相同,但有时当 Ubuntu 从一个版本升级到另一个版本时,此文件会发生变化(没有导致.bashrc现有用户主目录中的文件发生更改)。此文件是/etc/skel/.bashrc(因为当以通常方式创建帐户时,目录的内容会被复制到新创建的用户帐户的主目录中),您可以通过运行以下命令查看它与您的文件/etc/skel之间的差异:.bashrc

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

在这个问题的一个变体中,你的~/.bashrcshell 中可能包含放置在非常高位置的输出生成命令,以便它们在检查当前 shell 是否为交互的之前运行。许多非交互式 shell 根本不运行命令~/.bashrc,但一些远程 shell(在 Ubuntu 中包括通过非交互方式运行单个命令ssh并管理sftpscp连接的 shell)会运行。由于大多数.bashrc实际用途不适合这样的 shell,因此默认.bashrc检查当前运行的 shell 是否是交互式的,如果不是,则停止。如果你想在这些 shell 中运行某些东西,它必须放在交互性检查之前。更常见的情况是,你没有这样做,但可能还是把它们放在那里了。交互性检查之前产生任何输出的命令通常会阻止sftpscp用户帐户工作,直到它们被删除。

(或者,更罕见的是,这项检查可能会被删除或修改。在 Debian 和 Ubuntu 之外,默认.bashrc可能包含或不包含这样的检查。这个答案主要针对 Ubuntu 用户。)

该问题的另一种变体是,您正在寻找的命令无法在登录 shell 中找到,~/.bashrc并且只能在登录 shell 中运行,其中包括您在非图形虚拟控制台上登录时以及ssh进入计算机时获得的 shell,但不包括您打开终端窗口时获得的 shell(除非您已将终端应用程序配置为启动登录 shell,或者除非这是 Windows 10 中的 WSL 系统)。shopt login_shell告诉您当前正在运行的交互式 Bash shell 是否是登录 shell。

在这种情况下,您应该检查您的~/.profile登录 shell 使用什么:

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

在 Ubuntu 中,通常不会有~/.bash_profile~/.bash_login文件。如果其中一个文件存在,则会使用它反而~/.profile尽管它可能会导致~/.profile被采购使用~/.profile

默认情况下,在 Ubuntu 中,~/.profile~/.bashrc,因此即使是交互式登录 shell 也会运行命令,~/.bashrc并且仅在登录 shell 中存在问题以及其他外壳并不一定意味着它必须位于 以外的地方~/.bashrc

~/.bashrc最后,请注意和 的系统范围对应项分别~/.profile/etc/bash.bashrc/etc/profile。这些文件很少被修改,也很少应该被修改,但如果您确实修改了它们,它们也会以类似的方式影响 shell 启动行为。

相关内容