这个问题我已经很久了。运行终端.profile后,.bashrc文件不起作用(不执行)。您能指出从哪里寻找问题根源?
~/.profile
不需要执行权限。(shell会获取它,但不会执行它)。尝试chmod -x ~/.profile
看看它是否仍然有效。
这个问题我已经很久了。运行终端.profile后,.bashrc文件不起作用(不执行)。您能指出从哪里寻找问题根源?
~/.profile
不需要执行权限。(shell会获取它,但不会执行它)。尝试chmod -x ~/.profile
看看它是否仍然有效。
Answers:
我也有类似的问题,我.profile
没有被跑步。事实证明(如该Apple StackExchange回答中所述),如果您拥有.bash_profile
或.bash_login
文件,那么.profile
bash将忽略您的文件。
我想这个问答应该交给超级用户,但是无论如何:
根据手册页的 INVOCATION部分,
/etc/profile
并~/.profile
读取了交互式登录外壳,并且~/.bashrc
为交互式非登录外壳读取。如果您的其他UNIX机器~/.bashrc
甚至自动读取交互式登录外壳程序,那是因为系统范围/etc/
profile
内的一行显示为~/.bashrc
。OS X的系统范围/etc/profile
内没有一个。
因此,如果您想~/.bashrc
甚至在交互式登录外壳程序上运行,都需要添加一行
. ~/.bashrc
在你的~/.profile
。
在终端首选项中,在“启动”窗格中检查。您可以选择:
外壳打开:
- 默认登录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>
。)
上面提供了很好的信息,但是我想分享一些有关我遇到的问题和找到的解决方案的细节。
需要:将目录添加到OSX 10.8(ML)上的PATH。
问题:指导通常是“修改主目录中的.profile”。有点令人困惑,因为默认情况下,此文件在OSX上不存在。令人困惑的是,一旦添加了导出语句以将新目录追加到现有PATH之后,它就行不通了。覆盖上面。
解决方案:我将导出语句添加到了.bash_profile中(也位于主目录中)。
我敢肯定有很多方法可以给这只猫剥皮。这个为我工作。令人鼓舞的信心:.bash_profile已经存在,我可以看到其他安装的软件(例如Ruby)对其进行了修改。如果有更好的解决方案,我将很高兴听到它!