Difference when running 'Cygwin.bat' and i

2020-04-14 07:54发布

问题:

When I am running Cygwin.bat I've got my all my custom stuff working from .bash_profile but when I am just running bash none of my stuff from .bash_profile is working and I am just got wired prefix like root@comp:/mnt/c/cygwin64# (as my current dir)

Is there any way to achieve the same result when running bash as I got when running Cygwin.bat

the content of Cygwin.bat is:

@echo off

C:
chdir C:\Tools\cygwin64\bin

bash --login -i

回答1:

As pointed out by @matzeri in the comment, cygwin.bat invokes bash with the --login option which creates an interactive login shell. And bash without the --login option creates an interactive shell which is not a login shell.

According to bash man page:

When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.

My ~/.bash_profile has only one line:

source ~/.bashrc

and I put all conf in ~/.bashrc.