programmerNoob1234 Asked: 2020-06-14 11:07:28 +0800 CST2020-06-14 11:07:28 +0800 CST 2020-06-14 11:07:28 +0800 CST 每次我打开终端,已经执行了几个命令 772 我是初学者,很久没有使用Linux了。现在我不再知道我做了什么,每次打开终端时都会执行 3 个命令,我不再需要这些命令,也不再像以前那样工作了。现在我的问题是:如何关闭每次打开终端时都会执行这些命令。 command-line gnome-terminal bash execute-command 2 个回答 Voted Best Answer Christos Takaridis 2020-06-14T11:15:51+08:002020-06-14T11:15:51+08:00 检查目录中的.bashrc文件以获取命令。homesource 每次您的终端仿真器启动时都会读取此文件,如果它包含 asource它会运行这些命令。 您可以通过运行检查这一点: cat .bashrc | grep source Eliah Kagan 2020-06-14T12:09:24+08:002020-06-14T12:09:24+08:00 TL;DR: diff /etc/skel/.bashrc ~/.bashrc显示对 的更改~/.bashrc,并且还有其他文件~/.bashrc可能会产生您所描述的问题。 当您启动 Bash shell 时运行意外命令时,.bashrc 如 Christos Takaridis 所说,检查通常会发现问题。但有时这还不够。除了source命令之外,还有更多要检查的文件,有时您需要检查的文件不仅仅是.bashrc. 内置的 Bash shellsource也可以拼写.(这实际上是它更常见的拼写),所以除了: grep source ~/.bashrc 运行以下命令也可能会有所帮助: grep -F '. ' ~/.bashrc (没有-F,该grep命令将其模式视为正则表达式,并且.正则表达式中未转义的字符匹配任何字符,而不仅仅是文字.。) 虽然,即使在 之后的文字空间.,如图所示,也可能有一些误报。 如果您确实找到了使用source命令或.命令(在 Bash 中它们是同义词)来源的文件,那么我建议在注释掉(使用前导#)或删除sourceor.行之前检查它们的内容。在它们中,您可能会找到您正在寻找的命令,或者您可能会找到其他.或source命令。 特别是~/.bashrcUbuntu 中的默认文件源(带有.)该文件(~/.bash_aliases如果存在)。通常这被用作定义别名的方便位置,但任何 Bash 命令都可以进入那里并运行。有时意外的输出结果是来自意外放置在非别名定义的命令~/.bash_aliases。如果别名定义意外格式错误,您还将以错误消息的形式获得输出(尽管如果它格式正确但定义为扩展的文本是错误的,那么在您实际使用别名之前您不会知道这一点)。 另一种检查已添加或删除内容的.bashrc方法是将其与系统为新创建的用户帐户提供的版本进行比较。通常这与您在进行修改之前开始使用的文件相同,但有时当 Ubuntu 从一个版本升级到另一个版本时,此文件会更改(不会导致.bashrc现有用户主目录中的文件发生更改)。这个文件是/etc/skel/.bashrc(因为目录的内容被复制到新创建的用户帐户的主目录中,当以通常的方式创建帐户时),您可以通过运行查看它与您的文件/etc/skel之间的差异:.bashrc diff /etc/skel/.bashrc ~/.bashrc 在这个问题的一个变体中,您~/.bashrc可能包含放置在非常高的位置的输出生成命令,以便它们在检查当前 shell 是否是交互式的之前运行。许多非交互式 shell 根本不运行命令~/.bashrc,但是一些远程 shell(在 Ubuntu 中包括以非交互方式运行单个命令ssh并管理sftp或scp连接的 shell)会这样做。由于实际使用的大部分内容.bashrc不适合此类 shell,因此默认.bashrc检查当前运行的 shell 是否是交互式的,如果不是则停止。如果你想在这些 shell 中运行某些东西,它必须放在交互检查之前。更常见的是,你没有,但无论如何可能已经把它们放在那里。在交互性检查之前产生任何输出的命令通常会阻止sftp并scp为该用户帐户工作,直到它们被删除。 (或者,更罕见的是,此检查可能会被删除或修改。在 Debian 和 Ubuntu 之外,默认值.bashrc可能包含也可能不包含此类检查。此答案主要针对 Ubuntu 用户。) 在此问题的另一个变体中,您要查找的命令无法在其中找到~/.bashrc并且只能在登录 shell 中运行,其中包括您在非图形虚拟控制台上登录以及进入时获得的sshshell机器,但不包括您打开终端窗口时获得的 shell(除非您已将终端应用程序配置为启动登录 shell,或者除非这是 Windows 10 中的 WSL 系统)。shopt login_shell告诉您当前正在运行的交互式 Bash shell 是否是登录 shell。 在这种情况下,您应该检查您的~/.profile,哪些登录 shell 使用: diff /etc/skel/.profile ~/.profile 在 Ubuntu 中,您通常不会有~/.bash_profileor~/.bash_login文件。如果其中之一确实存在,它会被使用而不是,~/.profile尽管它可能会导致~/.profile被 sourcing 使用~/.profile。 默认情况下,在 Ubuntu 中,~/.profilesources ~/.bashrc,因此即使是交互式登录 shell 也会在其中运行命令,~/.bashrc并且仅在登录 shell和其他 shell中存在问题并不意味着它一定存在于~/.bashrc. 最后,请注意 和 的系统范围对应物分别是~/.bashrc和。这些文件很少被修改,也很少应该被修改,但如果你修改它们,它们也会以类似的方式影响 shell 启动行为。~/.profile/etc/bash.bashrc/etc/profile
检查目录中的
.bashrc
文件以获取命令。home
source
每次您的终端仿真器启动时都会读取此文件,如果它包含 a
source
它会运行这些命令。您可以通过运行检查这一点:
TL;DR:
diff /etc/skel/.bashrc ~/.bashrc
显示对 的更改~/.bashrc
,并且还有其他文件~/.bashrc
可能会产生您所描述的问题。当您启动 Bash shell 时运行意外命令时,
.bashrc
如 Christos Takaridis 所说,检查通常会发现问题。但有时这还不够。除了source
命令之外,还有更多要检查的文件,有时您需要检查的文件不仅仅是.bashrc
.内置的 Bash shell
source
也可以拼写.
(这实际上是它更常见的拼写),所以除了:运行以下命令也可能会有所帮助:
(没有
-F
,该grep
命令将其模式视为正则表达式,并且.
正则表达式中未转义的字符匹配任何字符,而不仅仅是文字.
。)虽然,即使在 之后的文字空间
.
,如图所示,也可能有一些误报。如果您确实找到了使用
source
命令或.
命令(在 Bash 中它们是同义词)来源的文件,那么我建议在注释掉(使用前导#
)或删除source
or.
行之前检查它们的内容。在它们中,您可能会找到您正在寻找的命令,或者您可能会找到其他.
或source
命令。特别是
~/.bashrc
Ubuntu 中的默认文件源(带有.
)该文件(~/.bash_aliases
如果存在)。通常这被用作定义别名的方便位置,但任何 Bash 命令都可以进入那里并运行。有时意外的输出结果是来自意外放置在非别名定义的命令~/.bash_aliases
。如果别名定义意外格式错误,您还将以错误消息的形式获得输出(尽管如果它格式正确但定义为扩展的文本是错误的,那么在您实际使用别名之前您不会知道这一点)。另一种检查已添加或删除内容的
.bashrc
方法是将其与系统为新创建的用户帐户提供的版本进行比较。通常这与您在进行修改之前开始使用的文件相同,但有时当 Ubuntu 从一个版本升级到另一个版本时,此文件会更改(不会导致.bashrc
现有用户主目录中的文件发生更改)。这个文件是/etc/skel/.bashrc
(因为目录的内容被复制到新创建的用户帐户的主目录中,当以通常的方式创建帐户时),您可以通过运行查看它与您的文件/etc/skel
之间的差异:.bashrc
在这个问题的一个变体中,您
~/.bashrc
可能包含放置在非常高的位置的输出生成命令,以便它们在检查当前 shell 是否是交互式的之前运行。许多非交互式 shell 根本不运行命令~/.bashrc
,但是一些远程 shell(在 Ubuntu 中包括以非交互方式运行单个命令ssh
并管理sftp
或scp
连接的 shell)会这样做。由于实际使用的大部分内容.bashrc
不适合此类 shell,因此默认.bashrc
检查当前运行的 shell 是否是交互式的,如果不是则停止。如果你想在这些 shell 中运行某些东西,它必须放在交互检查之前。更常见的是,你没有,但无论如何可能已经把它们放在那里。在交互性检查之前产生任何输出的命令通常会阻止sftp
并scp
为该用户帐户工作,直到它们被删除。(或者,更罕见的是,此检查可能会被删除或修改。在 Debian 和 Ubuntu 之外,默认值
.bashrc
可能包含也可能不包含此类检查。此答案主要针对 Ubuntu 用户。)在此问题的另一个变体中,您要查找的命令无法在其中找到
~/.bashrc
并且只能在登录 shell 中运行,其中包括您在非图形虚拟控制台上登录以及进入时获得的ssh
shell机器,但不包括您打开终端窗口时获得的 shell(除非您已将终端应用程序配置为启动登录 shell,或者除非这是 Windows 10 中的 WSL 系统)。shopt login_shell
告诉您当前正在运行的交互式 Bash shell 是否是登录 shell。在这种情况下,您应该检查您的
~/.profile
,哪些登录 shell 使用:在 Ubuntu 中,您通常不会有
~/.bash_profile
or~/.bash_login
文件。如果其中之一确实存在,它会被使用而不是,~/.profile
尽管它可能会导致~/.profile
被 sourcing 使用~/.profile
。默认情况下,在 Ubuntu 中,
~/.profile
sources~/.bashrc
,因此即使是交互式登录 shell 也会在其中运行命令,~/.bashrc
并且仅在登录 shell和其他 shell中存在问题并不意味着它一定存在于~/.bashrc
.最后,请注意 和 的系统范围对应物分别是
~/.bashrc
和。这些文件很少被修改,也很少应该被修改,但如果你修改它们,它们也会以类似的方式影响 shell 启动行为。~/.profile
/etc/bash.bashrc
/etc/profile