我有一台 Windows 7 64 位 PC。我在 c:\cygwin64 目录中安装了 Cygwin 版本 2.6.0。
我很困惑,当我打开 Cygwin64 终端时配置文件会/etc/bash.bashrc
运行吗?
我认为这是一个交互式登录 shell,因此根据我的理解/etc/bash.bashrc
它永远不会运行。以下是我理解的链接:https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/
但在/etc/bash.bashrc
文件中我可以看到环境变量PS1
已设置。并且它与我使用命令时获得的值相同echo $PS1
。那么这是否意味着/etc/bash.bashrc
已运行?
我可能没有正确理解“交互式登录”和“交互式非登录”。如能提供任何帮助,我将不胜感激。
谢谢
答案1
当我打开 Cygwin64 终端时是否/etc/bash.bashrc
运行?
简短回答:
是的。我在 bash 启动文件中添加了一些 echo 语句,并打开了 Cywin64 终端。以下是输出:
/etc/bash.bashrc
/home/DavidPostill/.bash_profile
.profile
/home/DavidPostill/.bashrc
/home/DavidPostill/.bashrc
$
由于某种原因~/.bashrc
被调用两次,目前我不确定为什么。
长答案:
Cygwin64 终端的快捷方式运行以下命令:
C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -
对各州的帮助mintty
:
$ mintty --help
Usage: mintty [OPTION]... [ PROGRAM [ARG]... | - ]
Start a new terminal session running the specified program or the user's shell.
If a dash is given instead of a program, invoke the shell as a login shell.
因此我们可以看到快捷命令末尾的命令-
导致登录 shell 的运行。
接下来发生的情况取决于您的登录 shell 的设置。
假设设置为bash
:
如果它是一个登录 shell,Cygwin 将会执行
~/.bash_profile
(如果它存在),否则~/.profile
。注意
.bash_profile
将执行~/.profile
如果它是一个交互式 shell,Cygwin 将执行
~/.bashrc
.profile(其他名称也有效,请参阅 bash 手册页)包含 bash 命令。当 bash 作为登录 shell 启动时,它会被执行,例如从命令 bash --login。这是一个定义和导出环境变量和 bash 函数的有用位置,这些变量和函数将由 bash 和 bash 调用的程序使用。如果需要,这是一个重新定义 PATH 的好地方。我们建议在 PATH 末尾添加“:.”,以便搜索当前工作目录(与 DOS 相反,默认情况下不搜索本地目录)。此外,为了避免延迟,您应该取消设置 MAILCHECK 或定义 MAILPATH 以指向您现有的邮件收件箱。
.bashrc 与 .profile 类似,但每次启动交互式 bash shell 时都会执行。它用于定义不通过环境继承的元素,例如别名。如果您不使用登录 shell,您可能希望将上述 .profile 的内容放在此文件中。
来源自定义 bash
答案2
这答案很好地解释了登录和非登录之间的区别。总而言之,在 Cygwin 下,您已经登录并打开了一个新的终端窗口。这与您在 Linux 桌面上打开终端仿真器或使用 相同screen
。
答案3
当你打开 cygwin 的终端时,它总是“交互式登录”。看到c:\cygwin\cygwin.bat
其中包含bash --login -i
。
根据bash
的手册:
“如果存在 -i 选项,则 shell 是交互式的。”
而“--login”是
“使 bash 表现得像被调用为登录 shell 一样”。
你问的是/etc/bash.bashrc
- 它是系统范围的初始化文件bashrc
,可以被本地覆盖~/.bashrc
或在用户目录没有的情况下应用~/.bashrc
。当你已经在 cygwin 的终端中并尝试运行时bash
- 它是非登录的,因为你已经登录了,但它是交互式会话,因为你bash
不是从脚本调用的。如果你将从bash
脚本调用
#!/bin/bash
echo "Hello SuperUser"
那么它是非交互式和非登录调用。这种方式根本bash
不会读取任何内容。bashrc
阅读“调用”部分官方 bash 手册更好地理解如何bash
解释~/.bash_profile
、、、和使用它~/.bash_login
的顺序。 ~/.profile
/etc/bash.bashrc
~/.bashrc