我昨晚更新了我的mac和ubuntu服务器。而“.bash_profile”和其他类似文件发生了一些奇怪的事情。
在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
适用于echo
和alias
命令。
正如我想在alias
中涉及某些文件权限问题,我使用:
$ sudo bash .bash_profile
它也行不通。
登录将同时适用于echo
和alias
。
第二次更改发生在我的ubuntu服务器上,但不是第一次更改。
有人对此有任何想法吗?为什么echo工作但别名不工作?
我想这是一个新的更新。由于我是管理员领域的新手,我想知道在哪里可以得到这种信息通知。
很多!
答案 0 :(得分:0)
执行bash脚本时,该脚本在新的子shell中运行,该子shell在脚本退出时死亡。因此,别名命令仅影响子shell,而不影响执行脚本的外壳。但是,子shell保持连接到与外壳相同的终端,这就是为什么你仍然可以看到echo命令的输出。
当您使用bash脚本时,不会生成子shell。相反,脚本中的命令是逐个执行的,就像你输入了它们一样。所以alias命令在你从中获取.bash_profile的同一个shell中调用,并且别名在该shell中可用。