.profile和.bashrc在我的Mac上不起作用


29

这个问题我已经很久了。运行终端.profile后,.bashrc文件不起作用(不执行)。您能指出从哪里寻找问题根源?


检查此文件是否具有适当的权限

是的...您是对的,原因确实是很愚蠢-权限错误chmod + x〜/ .profile,一切正常。

5
@xTrol:这没有意义,~/.profile不需要执行权限。(shell会获取它,但不会执行它)。尝试chmod -x ~/.profile看看它是否仍然有效。
基思·汤普森

Answers:


40

我也有类似的问题,我.profile没有被跑步。事实证明(如该Apple StackExchange回答中所述),如果您拥有.bash_profile.bash_login文件,那么.profilebash将忽略您的文件。


2
我的问题是我安装了Python,该Python自动创建了.bash_profile文件,该文件导致我的.profile无法运行。

5
这个答案对我有帮助。.bash_login我安装后添加了rvm

17

我想这个问答应该交给超级用户,但是无论如何:

根据手册页的 INVOCATION部分,

  • /etc/profile~/.profile读取了交互式登录外壳,并且
  • ~/.bashrc 为交互式非登录外壳读取。

如果您的其他UNIX机器~/.bashrc甚至自动读取交互式登录外壳程序,那是因为系统范围/etc/ profile内的一行显示为~/.bashrc。OS X的系统范围/etc/profile内没有一个。

因此,如果您想~/.bashrc甚至在交互式登录外壳程序上运行,都需要添加一行

. ~/.bashrc

在你的~/.profile


并在此处填写缺失的部分:默认情况下,终端外壳程序(OP的问题所针对的)是交互式登录外壳程序。
LarsH

3

尝试“手工”采购:

source ~/.profile

看看会发生什么。请注意,正如其他人指出的那样,.profile是由登录Shell来源的,.bashrc是非登录Shell的来源的。因此,请尝试一个或另一个,而不是两者都选。


2

在终端首选项中,在“启动”窗格中检查。您可以选择:

外壳打开:

  • 默认登录shell(/ usr / bin / login)
  • 命令(完整路径)

我选择了“默认” ...如果您选择了自定义命令,则可能是一个因素。

接下来要检查的是外壳程序是否作为登录外壳程序启动。当我ps列出清单时,我看到:

  PID TTY           TIME CMD
24088 ttys000    0:00.03 -sh
24614 ttys001    0:00.03 -sh
25127 ttys002    0:00.05 -sh
35544 ttys003    0:00.08 -sh
40926 ttys004    0:00.03 -sh

这里的关键点是-外壳名称前面的' '。告诉外壳程序遍历配置文件和相关内容。如果您在当前窗口中没有看到该设置,则可能需要先进行设置设置,然后再进行设置。

终端首选项中的设置窗格还列出了外壳程序选项。我的清单中有/ bin / sh。


你不需要这个

如果最坏的情况变得最糟,您可以像过去在其他一些不合作的系统上一样进行操作-创建了一个程序“ loginsh”,该程序可以从Windows运行,然后依次使用“ -” 执行我选择的shell 。前缀,告诉它充当登录外壳。

#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "stderr.h"
#include "jlss.h"

#ifndef DEFAULT_SHELL
#define DEFAULT_SHELL   "/bin/sh"
#endif /* DEFAULT_SHELL */

#ifndef MAX_SHELLBASENAME
#define MAX_SHELLBASENAME   256
#endif /* MAX_SHELLBASENAME */

#ifndef lint
static const char sccs[] = "@(#)$Id: loginsh.c,v 4.2 2005/06/22 19:44:07 jleffler Exp $";
#endif

int main(int argc, char **argv)
{
    char     *shell;
    char      shellname[MAX_SHELLBASENAME];

    err_setarg0(argv[0]);

    /* Which shell to use? */
    if ((shell = getenv("SHELL")) == (char *)0)
        shell = DEFAULT_SHELL;

    /* Set up argv[0] in new argument list; reuse old argv space */
    shellname[0] = '-';
    strcpy(&shellname[1], jlss_basename(shell));
    argv[0] = shellname;

    /* Execv must work -- the shell must be an executable program */
    execv(shell, &argv[0]);
    err_syserr("cannot execute shell %s\n", shell);

    /* NOTREACHED */
    return(EXIT_FAILURE);
}

"stderr.h"标头和' err_*例程是我在各处使用的错误报告包。该jlss_basename()功能基本上与系统提供的版本相同,例如POSIX中的版本<libgen.h>。)


2

上面提供了很好的信息,但是我想分享一些有关我遇到的问题和找到的解决方案的细节。

需要:将目录添加到OSX 10.8(ML)上的PATH。

问题:指导通常是“修改主目录中的.profile”。有点令人困惑,因为默认情况下,此文件在OSX上不存在。令人困惑的是,一旦添加了导出语句以将新目录追加到现有PATH之后,它就行不通了。覆盖上面。

解决方案:我将导出语句添加到了.bash_profile中(也位于主目录中)。

我敢肯定有很多方法可以给这只猫剥皮。这个为我工作。令人鼓舞的信心:.bash_profile已经存在,我可以看到其他安装的软件(例如Ruby)对其进行了修改。如果有更好的解决方案,我将很高兴听到它!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.