Mac上.bash_profile上的奇怪行为

时间:2013-12-18 00:52:08

标签: macos bash ubuntu

问题描述

方案

我昨晚更新了我的mac和ubuntu服务器。而“.bash_profile”和其他类似文件发生了一些奇怪的事情。

更改

的Mac

在Mac上,我注意到两个变化:

1.这些文件的文件权限已从744更改为644,因此我无法直接执行它们。如果我改回744并执行它们,我会得到如下错误:

$ -bash(3663,0x7fff79abd310) malloc: *** error for object 0x7fb753d06160: pointer being     freed was not allocated
$ *** set a breakpoint in malloc_error_break to debug
$ Abort trap: 6

2.当我使用bash命令与文件(644)

$ bash .bash_profile

它将部分工作,在文件中打印任何echo命令,但文件中的alias命令将不起作用。

只有带文件(644)的源命令

$ source .bash_profile

适用于echoalias命令。

正如我想在alias中涉及某些文件权限问题,我使用:

$ sudo bash .bash_profile

它也行不通。

登录将同时适用于echoalias

Ubuntu的

第二次更改发生在我的ubuntu服务器上,但不是第一次更改。

问题

  1. 有人对此有任何想法吗?为什么echo工作但别名不工作?

  2. 我想这是一个新的更新。由于我是管理员领域的新手,我想知道在哪里可以得到这种信息通知。

  3. 很多!

1 个答案:

答案 0 :(得分:0)

执行bash脚本时,该脚本在新的子shell中运行,该子shell在脚本退出时死亡。因此,别名命令仅影响子shell,而不影响执行脚本的外壳。但是,子shell保持连接到与外壳相同的终端,这就是为什么你仍然可以看到echo命令的输出。

当您使用bash脚本时,不会生成子shell。相反,脚本中的命令是逐个执行的,就像你输入了它们一样。所以alias命令在你从中获取.bash_profile的同一个shell中调用,并且别名在该shell中可用。