Bash

.bash_profile 和終端命令的問題

  • June 15, 2012

我添加了一些數據來.bash_profile執行兩個別名 ruby​​ 版本 19 和適當的 gem。一旦我添加了數據,我就無法再執行任何命令,例如MacPorts命令埠或命令夥伴來執行TextMate。一旦我停用.bash_profile.bash_login甚至.bash_history一切都恢復了。.bash_history得到了重新生成,不久之後我.bash_profile恢復了我急需的別名,但後來我失去了再次執行這些命令的選項。以下是所有這些文件的一些輸出:

jaspersmbp:~ jasper$ cat .bash_profile
   alias ruby='/opt/local/bin/ruby1.9'
   alias gem='/opt/local/bin/gem'
jaspersmbp:~ jasper$ cat .bash_login
jaspersmbp:~ jasper$ cat .bashrc
   HISTFILESIZE=1000000000
   HISTSIZE=1000000
jaspersmbp:~ jasper$ cat .profile
   #Django path
   export PATH=/opt/local/bin:opt/local/sbin:/opt/local/lib/python2.4/site-packages/django/bin:$PATH
   # Apache alias
   alias apacherestart='sudo /opt/local/apache2/bin/apachectl -k restart'
   #Subversion OSX for Eclips Joomla Development
   export PATH=/opt/subversion/bin:$PATH
   #Test
   #echo $PATH
   ##
   # Your previous /Users/jasper/.profile file was backed up as /Users/jasper/.profile.macports-saved_2012-05-18_at_09:47:58
   ##
   # MacPorts Installer addition on 2012-05-18_at_09:47:58: adding an appropriate PATH variable for use with MacPorts.
   export PATH=/opt/local/bin:/opt/local/sbin:$PATH
   # Finished adapting your PATH environment variable for use with MacPorts.

有誰知道為什麼.bash_profile主動取消使用諸如 mate 和 port 之類的命令?我真的需要.bash_profile工作,所以我可以使用別名,並且我需要 MacPorts 埠命令用於各種軟體。

看起來 MacPort 正在生成您的配置文件,並弄亂了您的PATH等等。解決此問題的最簡單方法是自己動手 - 禁用 MacPort 生成/創建與您的路徑和別名有關的點文件,刪除.bash_profile.profile文件,然後將以下內容附加到~/.bashrc文件中:

# define aliases
alias ruby='ruby1.9'
alias apacherestart='sudo apachectl -k restart'

# define hist properties
HISTFILESIZE=1000000000
HISTSIZE=1000000

# define path to programs
PATH=/opt/local/bin:opt/local/sbin:/opt/subversion/bin:/opt/local/apache2/bin/:/opt/local/lib/python2.4/site-packages/django/bin:$PATH

# define manpath
MANPATH=/opt/local/share/man:$MANPATH

# export env vars
export HISTFILESIZE HISTSIZE PATH MANPATH

啟動一個新終端並執行echo $PATH以檢查是否所有內容都在其中,然後測試安裝在/opt/local/bin. 由於上述PATH=語句中的所有目錄現在都在您的目錄中,因此PATH您不需要使用二進制絕對路徑的別名 - 例如,您不再需要別名,gem因為您可以執行gem.

更新:如果您~/.bashrc沒有來源,請放入source ~/.bashrc乾淨的~/.bash_profile.

Bash 讀取~/.bash_profile它是否存在,~/.profile如果不存在。因此,當您創建時~/.bash_profile,您~/.profile的不再使用。與其他 shell 相比,您的別名不是特定於 bash 的,因此您不妨將它們放在~/.profile.

此外,您啟動互動式登錄 bash,bash 讀取~/.bash_profile~/.profile(特定於 bash 的會話啟動腳本,或通用 shell 會話啟動腳本,如果它不存在),但不是~/.bashrc(互動式 bash 啟動腳本)。因此,將這兩行放入您的文件~/.bash_profile中以按原樣載入所有內容:

. ~/.profile
case $- in *i*) . ~/.bashrc;; esac

引用自:https://unix.stackexchange.com/questions/40423