我的西格温 $HOME /. bashrc 中设定了以下变量
PATH=/bin:/usr/sbin:"/cygdrive/c/Program Files/Java/jdk1.6.0_26/bin":$PATH
问题是,当我登录和.bashrc被执行时, 我得到的重复启动如下:
Dragos@dragos ~
$ echo $PATH | tr :
/bin
/usr/sbin
/cygdrive/c/Program Files/Java/jdk1.6.0_26/bin
/bin
/usr/sbin
/cygdrive/c/Program Files/Java/jdk1.6.0_26/bin
/usr/local/bin
/usr/bin
/cygdrive/c/WINDOWS
/cygdrive/c/WINDOWS/system32
/cygdrive/c/WINDOWS/System32/Wbem
/cygdrive/c/curl
/
/cygdrive/c/gnupg
/cygdrive/c/Progra~1/cvsnt
/cygdrive/c/Progra~1/GNU/WinCvs 2.0
/cygdrive/c/Progra~1/Notepad++
/cygdrive/c/Progra~1/PuTTY
/cygdrive/c/Progra~1/WinSCP
/cygdrive/c/Python26
/cygdrive/c/Python26/Lib/site-packages/PyQt4/bin
/cygdrive/c/Python26/Scripts
/usr/bin
/usr/lib/lapack
有人知道是什么原因吗?
这里是我的 < code>. bashrc
$ cat ~/.bashrc
# base-files version 3.7-1
# To pick up the latest recommended .bashrc content,
# look in /etc/defaults/etc/skel/.bashrc
# Modifying /etc/skel/.bashrc directly will prevent
# setup from updating it.
# The copy in your home directory (~/.bashrc) is yours, please
# feel free to customise it to create a shell
# environment to your liking. If you feel a change
# would be benificial to all, please feel free to send
# a patch to the cygwin mailing list.
# User dependent .bashrc file
# Shell Options
# #############
# See man bash for more options...
# Don t wait for job termination notification
# set -o notify
# Don t use ^D to exit
# set -o ignoreeof
# Use case-insensitive filename globbing
# shopt -s nocaseglob
# Make bash append rather than overwrite the history on disk
# shopt -s histappend
# When changing directory small typos can be ignored by bash
# for example, cd /vr/lgo/apaache would find /var/log/apache
# shopt -s cdspell
# Completion options
# ##################
# These completion tuning parameters change the default behavior of bash_completion:
# Define to access remotely checked-out files over passwordless ssh for CVS
# COMP_CVS_REMOTE=1
# Define to avoid stripping description in --option=description of ./configure --help
# COMP_CONFIGURE_HINTS=1
# Define to avoid flattening internal contents of tar files
# COMP_TAR_INTERNAL_PATHS=1
# If this shell is interactive, turn on programmable completion enhancements.
# Any completions you add in ~/.bash_completion are sourced last.
# case $- in
# *i*) [[ -f /etc/bash_completion ]] && . /etc/bash_completion ;;
# esac
# History Options
# ###############
# Don t put duplicate lines in the history.
# export HISTCONTROL="ignoredups"
# Ignore some controlling instructions
# export HISTIGNORE="[ ]*:&:bg:fg:exit"
# Whenever displaying the prompt, write the previous line to disk
# export PROMPT_COMMAND="history -a"
# Aliases
# #######
# Some example alias instructions
# If these are enabled they will be used instead of any instructions
# they may mask. For example, alias rm= rm -i will mask the rm
# application. To override the alias instruction use a before, ie
#
m will call the real rm not the alias.
# Interactive operation...
# alias rm= rm -i
# alias cp= cp -i
# alias mv= mv -i
# Default to human readable figures
# alias df= df -h
# alias du= du -h
# Misc :)
# alias less= less -r # raw control characters
# alias whence= type -a # where, of a sort
# alias grep= grep --color # show differences in colour
# Some shortcuts for different directory listings
alias ls= ls -hF --color=tty # classify files in colour
# alias dir= ls --color=auto --format=vertical
# alias vdir= ls --color=auto --format=long
# alias ll= ls -l # long list
# alias la= ls -A # all but . and ..
# alias l= ls -CF #
# Functions
# #########
# Some example functions
# function settitle() { echo -ne "e]2;$@ae]1;$@a"; }
# Notepad++ function
# Pass in a UNIX path
# Starts notepad++ given a UNIX path argument
function notepadpp() {
local notepadUnixPath="/cygdrive/c/Program Files/Notepad++/notepad++.exe"
#local notepadArgPath=$(eval $(echo cygpath -w -a "$*"))
local notepadArgPath=`cygpath -w -a "$*"`
"$notepadUnixPath" -multiInst "$notepadArgPath" &
}
alias notepad++=notepadpp
# Explorer function
# Pass in a UNIX path
# Starts explorer given a UNIX path argument
function explorer() {
local explorerArgPath=`cygpath -w -a "$*"`
cmd /C start "" "$explorerArgPath" &
}
alias vi=vim
# Change filename starting with prefix string to another prefix string
alias mvprefix= $HOME/mvprefix.sh
# Change filename ending with suffix string to another suffix string
alias mvsuffix= $HOME/mvsuffix.sh
# Change filename ending with suffix string to a string prefixed with todays date
alias todaysuffix= $HOME/todaysuffix.sh
# Generate secure passwords by default
alias pwgen= pwgen -y -c -s -n
export INPUTRC=$HOME/.inputrc
export EDITOR=vim
export PATH=/bin:/usr/sbin:"/cygdrive/c/Program Files/Java/jdk1.6.0_26/bin":$PATH
# Overwrite DOS env variable APPDATA with our own for installing perl CPANPLUS
export APPDATA=$HOME
这里是我的 .bash_ profile
$ cat .bash_profile
# base-files version 3.7-1
# To pick up the latest recommended .bash_profile content,
# look in /etc/defaults/etc/skel/.bash_profile
# Modifying /etc/skel/.bash_profile directly will prevent
# setup from updating it.
# The copy in your home directory (~/.bash_profile) is yours, please
# feel free to customise it to create a shell
# environment to your liking. If you feel a change
# would be benifitial to all, please feel free to send
# a patch to the cygwin mailing list.
# ~/.bash_profile: executed by bash for login shells.
# source the system wide bashrc if it exists
if [ -e /etc/bash.bashrc ] ; then
source /etc/bash.bashrc
fi
# source the users bashrc if it exists
if [ -e "${HOME}/.bashrc" ] ; then
source "${HOME}/.bashrc"
fi
# Set PATH so it includes user s private bin if it exists
# if [ -d "${HOME}/bin" ] ; then
# PATH=${HOME}/bin:${PATH}
# fi
# Set MANPATH so it includes users private man if it exists
# if [ -d "${HOME}/man" ]; then
# MANPATH=${HOME}/man:${MANPATH}
# fi
# Set INFOPATH so it includes users private info if it exists
# if [ -d "${HOME}/info" ]; then
# INFOPATH=${HOME}/info:${INFOPATH}
# fi
这里是我的 /etc/bash.bashrc
$ cat /etc/bash.bashrc
# To the extent possible under law, the author(s) have dedicated all
# copyright and related and neighboring rights to this software to the
# public domain worldwide. This software is distributed without any warranty.
# You should have received a copy of the CC0 Public Domain Dedication along
# with this software.
# If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
# base-files version 4.1-1
# /etc/bash.bashrc: executed by bash(1) for interactive shells.
# The latest version as installed by the Cygwin Setup program can
# always be found at /etc/defaults/etc/bash.bashrc
# Modifying /etc/bash.bashrc directly will prevent
# setup from updating it.
# System-wide bashrc file
# Check that we haven t already been sourced.
([[ -z ${CYG_SYS_BASHRC} ]] && CYG_SYS_BASHRC="1") || return
# If not running interactively, don t do anything
[[ "$-" != *i* ]] && return
# Set a default prompt of: user@host and current_directory
PS1= [e]0;wa]
[e[32m]u@h [e[33m]w[e[0m]
$
# Uncomment to use the terminal colours set in DIR_COLORS
# eval "$(dircolors -b /etc/DIR_COLORS)"
我不修改我的$HOME/.bashrc 命令中的 $PATH, 除了上面的设定 < code> PATH/ code> 命令之外的任何其它地方 。
如果我只输入一条通往美元PATH的路径, 那也会被复制:
PATH="/cygdrive/c/Program Files/Java/jdk1.6.0_26/bin":$PATH
成果包括:
Dragos@dragos ~
$ echo $PATH | tr :
/cygdrive/c/Program Files/Java/jdk1.6.0_26/bin
/cygdrive/c/Program Files/Java/jdk1.6.0_26/bin
/usr/local/bin
/usr/bin
/cygdrive/c/WINDOWS
/cygdrive/c/WINDOWS/system32
/cygdrive/c/WINDOWS/System32/Wbem
/cygdrive/c/curl
/
/cygdrive/c/gnupg
/cygdrive/c/Progra~1/cvsnt
/cygdrive/c/Progra~1/GNU/WinCvs 2.0
/cygdrive/c/Progra~1/Notepad++
/cygdrive/c/Progra~1/PuTTY
/cygdrive/c/Progra~1/WinSCP
/cygdrive/c/Python26
/cygdrive/c/Python26/Lib/site-packages/PyQt4/bin
/cygdrive/c/Python26/Scripts
/usr/bin
/usr/lib/lapack
那为什么是复制品?
增编:
I found that I m executing bash twice in my C:cygwinCygwin.bat
The reason is that I have a context menu command to "Open Bash Here" that passes
a starting path to C:cygwinCygwin.bat
这是我的C:cygwinCygwin.bat
@echo off
C:
set PATH=%PATH%;C:cygwinin
REM SHELL needed for any screen instances started from bash
set SHELL=/bin/bash
set HOME=C:cygwinhomeDragos
set HOMEDRIVE=C:
set HOMEPATH=cygwinhomeDragos
REM
if not [%1]==[] (
C:cygwinincygpath %1 > tmpFile
set /p startingpath= < tmpFile
del tmpFile
)
if "%startingpath%"=="" start C:cygwininmintty.exe --icon /Cygwin-Terminal.ico --size 140,50 --exec /bin/bash --login -c "exec /bin/bash -rcfile ~/.bashrc"
if not "%startingpath%"=="" start C:cygwininmintty.exe --icon /Cygwin-Terminal.ico --size 140,50 --exec /bin/bash --login -c "cd %startingpath% ; exec /bin/bash -rcfile ~/.bashrc"
exit
增编:
Figured out that I need to pass --noprofile --norc
to bash when calling bash.
Here s the updated C:cygwinCygwin.bat
@echo off
C:
set PATH=%PATH%;C:cygwinin
REM SHELL needed for any screen instances started from bash
set SHELL=/bin/bash
set HOME=C:cygwinhomeDragos
set HOMEDRIVE=C:
set HOMEPATH=cygwinhomeDragos
REM
if not [%1]==[] (
C:cygwinincygpath %1 > tmpFile
set /p startingpath= < tmpFile
del tmpFile
)
if "%startingpath%"=="" start C:cygwininmintty.exe --icon /Cygwin-Terminal.ico --size 140,50 --exec /bin/bash --login
if not "%startingpath%"=="" start C:cygwininmintty.exe --icon /Cygwin-Terminal.ico --size 140,50 --exec /bin/bash --noprofile --norc --login -c "cd %startingpath% ; exec /bin/bash -rcfile ~/.bashrc"
exit