如何摆脱每个新终端会话上运行的东西?

时间:2012-03-04 14:56:01

标签: bash rvm

我正在使用Lion。我在每个新的终端会话上输出错误:

-bash: __rvm_add_to_path: command not found

这是一个几乎全新的用户帐户.RVM安装在机器上的另一个帐户上.~ / .bashrc& 〜/ .bash_profile都是空白的...... env的输出是:

TERM_PROGRAM=Apple_Terminal
SHELL=/bin/bash
TERM=xterm-256color
TMPDIR=/var/folders/ry/8zsyknmx7dj4_2zzvn1n71500000gn/T/
Apple_PubSub_Socket_Render=/tmp/launch-jsfKPw/Render
TERM_PROGRAM_VERSION=303
TERM_SESSION_ID=3EBC0F1A-9867-41E5-8873-75E84B9F712F
USER=incorvia
COMMAND_MODE=unix2003
SSH_AUTH_SOCK=/tmp/launch-ZQqgPj/Listeners
Apple_Ubiquity_Message=/tmp/launch-u3d1lp/Apple_Ubiquity_Message
__CF_USER_TEXT_ENCODING=0x1F5:0:0
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin
PWD=/bin
LANG=en_US.UTF-8
HOME=/Users/incorvia
SHLVL=1
LOGNAME=incorvia
DISPLAY=/tmp/launch-0B0I8s/org.x:0
_=/usr/bin/env

我在这里看不到任何与RVM有关的内容..我还能在哪里看到它?

=====

的/ etc / bashrc中

# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
   return
fi

PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize
# Tell the terminal about the working directory at each prompt.
if [ "$TERM_PROGRAM" == "Apple_Terminal" ] && [ -z "$INSIDE_EMACS" ]; then
    update_terminal_cwd() {
        # Identify the directory using a "file:" scheme URL,
        # including the host name to disambiguate local vs.
        # remote connections. Percent-escape spaces.
        local SEARCH=' '
        local REPLACE='%20'
        local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
        printf '\e]7;%s\a' "$PWD_URL"
    }
    PROMPT_COMMAND="update_terminal_cwd; $PROMPT_COMMAND"
fi

======

固定...

在/ etc / profile的底部,它是源于/etc/profile.d/rvm.sh

不知道那是怎么到达的......

7 个答案:

答案 0 :(得分:12)

Bash在启动期间加载一系列文件。可以找到bash启动过程的一个很好的概述here

通常情况下,全局设置/etc/profile/etc/bashrc以及关联的个性化设置~/.profile~/.bashrc会被加载,但这会略微依赖于分布式(和例如,在Mac OS X上,默认情况下/etc/profile不存在)。

来自RVM Installation 页面:

  

多用户:

     

如果以root身份安装,将自动为系统中的每个用户配置rvm功能。这是通过在登录时加载/etc/profile.d/rvm.sh来完成的。大多数Linux发行版默认解析/ etc / profile,其中包含加载驻留在/etc/profile.d/目录中的所有文件的逻辑。一旦您添加了希望能够将RVM用于rvm组的用户,这些用户必须注销并重新登录才能获得rvm组成员身份,因为组成员资格仅在初始登录时由操作系统评估。

我猜其他用途已安装在Multi-User模式下; /etc/profile可能会加载/etc/profile.d/rvm.sh

要停止加载,您可以从source RVM删除/etc/profile行 - 但这会阻止所有用户加载

答案 1 :(得分:4)

对于具有工作资料的帐户,我有以下.rvmrc:

root@sc-27617:~# cat .rvmrc 
export rvm_prefix="/usr/local/lib/sc"
export rvm_path="/usr/local/lib/sc/rvm"

为了让我的其他帐户的错误消失,我只是将此文件复制到其他帐户并修复了权限(chown johndoe:johndoe /home/johndoe/.rvmrc)......

答案 2 :(得分:1)

在Ubuntu 12.04中,默认情况下,启动新终端时不会加载/etc/profile.d/rvm.sh。所以每次启动一个新的termail时,必须使用cmd来启动rvm:

source /etc/profile.d/rvm.sh

有两种方法可以解决它:

  1. 打开一个新终端 - >右键单击并选择Profiles-> Profile Preferences-> Title and Command->选择“Run command as login shell”。

  2. 按如下所示打开一个新终端 - >运行cmd,然后将/etc/profile.d/rvm.sh自动加载到新终端中:

    echo'[[-s“/etc/profile.d/rvm.sh”]]&& 。 “/etc/profile.d/rvm.sh”#Load RVM function'>>的〜/ .bashrc

  3. 正如一些解释here说第一个解决方案不是一个好的解决方案,但建议使用第二个解决方案。

    所以换句话说,如果你不希望终端在新终端上运行某些东西,你需要检查自动加载是否有两种方式:

    1. 检查是否选择“将命令作为登录shell”并取消选中。

    2. 打开〜/ .bashrc文件,找到与加载函数相关的行并删除它。

答案 3 :(得分:0)

我从之前的rvm安装中获得了相同的文件(/etc/profile.d/rvm.sh)。删除该文件也适用于我。

为了彻底,似乎需要退出shell。

答案 4 :(得分:0)

/etc/profile更改行:

source /etc/profile.d/rvm.sh

成:

if [ "${SHELL}" != "/bin/sh" ]; then
  source /etc/profile.d/rvm.sh
fi

<强>为什么吗

在Mac OS X中,超级用户(root)的默认shell是POSIX shell,而不是纯Bash。添加此类条件将禁用(可能)系统管理员使用的emerygency shell rvm /bin/sh。那很好。如果您想使用root帐户安装内容,则可以随时在命令行中输入bash然后rvm …

答案 5 :(得分:0)

Debian 6.1扫描/etc/profile.d/文件中的所有.sh文件并包含它们,因此任何配置文件或.bashrc文件中的rvm都没有列表。从/etc/profile.d/删除rvm.sh解决了这个问题。

答案 6 :(得分:0)

如果你有ZSH或OH-MY-ZSH,那么你需要从 / etc / zprofile <中删除源 /etc/profile.d/rvm.sh / p>