macos - Mac 上 .bash_profile 的奇怪行为

标签 macos bash ubuntu

关闭。这个问题不符合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

对两者都有效echoalias命令。

正如我猜想 alias 中的一些文件权限问题在哪里。 , 我用:
$ sudo bash .bash_profile

这也行不通。

并且登录将同时工作echoalias .

Ubuntu

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

问题
  • 有人对此有任何想法吗?为什么 echo 有效但 alias 无效?
  • 我想这是一个新的更新。由于我是管理员领域的新手,我想知道我在哪里可以获得这种信息通知。

  • 多谢!

    最佳答案

    当您执行 bash 脚本时,该脚本在一个新的子 shell 中运行,该子 shell 在脚本退出时终止。所以你的别名命令只影响那个子shell,而不是你执行脚本的外壳。但是,子shell 仍然连接到与外壳程序相同的终端,这就是为什么您仍然可以看到 echo 命令的输出的原因。

    当您获取 bash 脚本时,不会生成子 shell。相反,脚本中的命令会一一执行,就像您输入它们一样。因此,别名命令在您获取 .bash_profile 的同一 shell 中被调用,并且别名在该 shell 中可用。

    关于macos - Mac 上 .bash_profile 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647709/

    相关文章:

    c - 我的多项式计算代码中的错误在哪里?

    regex - 匹配允许有少量差异的单词

    html - 一次运行的 bash html 自动化脚本

    linux - 当输入被重定向到一个文件时,如何比较两个二进制文件的输出?

    linux - 从任何地方执行 shell 文件

    linux - 我的代码给出错误 : ./greeting2.sh: line 11: syntax error: unexpected end of file

    swift - NSScrollView 不滚动

    cocoa - 在我的应用程序主菜单中设置项目标题?

    macos - OSX 应用程序和命令行工具之间的 NSConnection

    Ubuntu 14.04 上的 php5.6 没有显示默认错误处理程序的错误