English 中文(简体)
Cygwin.bashrc PATH 获得重复条目
原标题:Cygwin .bashrc PATH gets duplicate entries

我的西格温 $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
最佳回答

我没有安装Cygwin, 我没有一台Windows机器, 所以我不能给你一船 细节。

查看 < code> man bash < / code > page < / code > page > 页面对您是否有帮助。 在普通的 BASH 中, < code>/ etc/ profile , < code>/ etc/ bashrc , $HOME/.bashrc , < code>$HOME/. bashrc < /code >,有时, < code> $HOME/. profor < / code > 都读取,取决于这是不是登录贝壳。 Cygwin 在 < code>/ etc < / codection > 目录中, 拥有每个文件的特殊版本。 但是, 还有其他脚本被引用并可能影响您的 Cygwin 环境。 例如, 导入窗口环境变量有特殊脚本, 包括 < code\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

在 Cygwin 中,默认的默认值是将 Windows 变量作为 Cygwin 路径的一部分。 它实际上是所有 Windows 环境变量的一般导入( 根据安装情况, 有时会转换为 / 和短目录名称 ) 。

如果您打开 xterm 窗口, 而不是为您的 Cygwin 命令行的标准 Windows 控制台窗口, 您也不得不检查 < em> xserve 脚本( 或不管它叫什么), 因为这也会将很多东西导入 Cygwin 环境 。

过去我曾经使用过Cygwin, 每次我使用Cygwin, 我都会发现自己都在追逐这些精确的东西, 再加上其他一些问题: 例如,默认的 Kornshell 装载环境脚本里面有一个错误。 我相信它们有一个字面上的“ QG ” 而不是 Ctrl- G, 或者它可能是另一个控制字符。 我记不得了。 我只知道每次安装它时我花一两个小时的时间清理我的 Cygwin 环境。 我喜欢 Cygwin, 但是这可能会很痛苦 。

对不起,我不能给你 更具体的方向。

问题回答

PATH 设置为您喜欢的( 没有提到 < code> $PATH ) 。 您不应该相信 < code> pATH , 相信某个随机的 sysadmin 认为是一个很好的 < code> PATH 。 在您 shell 的最后来源文件中这样做 。





相关问题
cygwin file path tab completion not working

How can I set up Cygwin to have tab completion? Actually, I do have it automatically, but it does not seem to complete paths. How do I set it up to complete paths?

cygwin version of idle has erroneous I/O handling

I am using idle (python 2.5) via cygwin on a windows vista machine and when I try to open an already existing .py file I see the full file path /home/aaron/C:/cygwin/home/aaron/script.py on the ...

Trying to get a terminal to work in Emacs

I ve been having a lot of problems with emacs and trying to get the terminal to work with: M-x term I installed cygwin and I fixed up my .emacs to include the paths: (setenv "PATH" (concat "...

Piping Cygwin into a Python program

As a i m new to the whole Piping thing and Python I had recently encountered a problem trying to pipe Cygwin s stdin & stdout into a python program usin Python s subprocess moudle. for example I ...

Unable to chdir() on Git/Cygwin

I installed Git via Cygwin on Windows Server. It works out very well. However there s a small issue that when I clone a repo use the command as following: $git clone git@myserver:project.git I ...

Linux Development C/C++/bash/python on windows-7

Before resorting to stackoverflow, i have spend a lot of times looking for the solutions. I have been a linux-user/developer for few years, now shifting to windows-7. I am looking for seting-up a ...

Cygwin/Git/Gitosis unable to push new repository

I ve recently set up cygwin, git, and gitosis on my Windows Server 2003 box and am having troubles. I ve followed just about every tutorial I can find to the letter, and have confirmed that my git ...