4

我尝试从源代码(不是自制软件)安装 bash 4.2。它有点运行,有点失败。当我将它设为我的默认登录 shell 时,我可以运行许多命令,但通常是基本命令,例如 cd /System 会杀死 shell。

我下载了主更新的压缩包,我基本上安装了它,相当于:

./configure && make && sudo make install
sudo ln -s /usr/local/bin/bash /bin/bash4
sudo bash -c "echo /bin/bash4 >> /private/etc/shells"
chsh -s /usr/local/bin/bash # A

...我还转到系统首选项 -> 用户和组 -> (我) -> 高级选项并将默认 shell 更改为 /bin/bash4。

Homebrew 似乎安​​装了 readline 并要求它,以及为 -DSSH_SOURCE_BASHRC 添加一个附加标志到环境中(这对我正在做的事情来说应该不是问题)

4

2 回答 2

2

当 t_string 不以 $HOME 开头时,问题似乎出在这一行。(解析.y:5278)

  strcpy (t_string, polite_directory_format (t_string));

快速而肮脏的修复:

diff --git i/general.c w/general.c
index 491a7ea267ab..ec9b6271015d 100644
--- i/general.c
+++ w/general.c
@@ -700,10 +700,11 @@ polite_directory_format (name)
       strncpy (tdir + 1, name + l, sizeof(tdir) - 2);
       tdir[0] = '~';
       tdir[sizeof(tdir) - 1] = '\0';
-      return (tdir);
     }
   else
-    return (name);
+    strcpy (tdir, name);
+
+  return (tdir);
 }

 /* Trim NAME.  If NAME begins with `~/', skip over tilde prefix.  Trim to

它归结为使用 gcc 编译和运行但使用 clang/llvm 失败的测试用例:

#include <stdio.h>
#include <string.h>

char *foo(char *buf) {
  return(buf);
}

int main(int argc, char *argv[]) {
  char buf[1024];

  strcpy(buf, "buffer");

  strcpy(buf, foo(buf));
  printf("%s\n", buf);
}

.

> gcc -o test test.c
> ./test
buffer
> cc -o test test.c
> ./test
Abort trap: 6
于 2013-11-03T00:32:09.430 回答
2

解决方法:在 PS1 中将 \w 更改为 \W。

于 2013-10-29T12:48:41.423 回答