关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。
我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为 on-topic对于堆栈溢出。
8年前关闭。
Improve this question
问题描述
设想
我昨晚更新了我的 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
第二次更改发生在我的 ubuntu 服务器上,但不是第一次更改。
问题
多谢!
最佳答案
当您执行 bash 脚本时,该脚本在一个新的子 shell 中运行,该子 shell 在脚本退出时终止。所以你的别名命令只影响那个子shell,而不是你执行脚本的外壳。但是,子shell 仍然连接到与外壳程序相同的终端,这就是为什么您仍然可以看到 echo 命令的输出的原因。
当您获取 bash 脚本时,不会生成子 shell。相反,脚本中的命令会一一执行,就像您输入它们一样。因此,别名命令在您获取 .bash_profile 的同一 shell 中被调用,并且别名在该 shell 中可用。
关于macos - Mac 上 .bash_profile 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647709/