2013-10-28 27 views
4

我試圖從源(不是自制軟件)安裝bash 4.2。它有點跑步,有點失敗。當我將它設爲我的默認登錄shell時,我可以運行許多命令,但通常會使用基本命令(如cd/System)來終止shell。在OS X 10.9上安裝bash 4.2的正確方法從源代碼的小牛,沒有得到「中止陷阱:6」和段錯誤

我下載了更新主壓縮包,我基本上用這個相當於安裝了它:

./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 

...我還去系統偏好設置 - >用戶和組 - >(ME) - >高級選項並將默認外殼更改爲/ bin/bash4。

家釀似乎安裝的readline和要求,以及爲-DSSH_SOURCE_BASHRC添加一個額外的標誌環境(這不應該是我在做什麼的問題)

+0

你是什麼意思「殺殼?」是否有任何錯誤消息或shell是否完全關閉?你檢查過日誌嗎? –

+0

從bash 3 shell,當我通過/ bin/bash4運行bash 4.2 shell,然後運行cd/System,我得到「Abort trap:6」作爲錯誤,並且它回落到bash 3 shell。 – Brian

回答

2

解決方法:更改\ W到PS1中的\ W。

+0

在我工作的〜/ .bashrc中。 \ W和\ w有不同的功能,你有機會知道爲什麼\ W不再工作? – Brian

+0

@Brian,如果你爲你的特定情況提供核心轉儲,我可以回答這個問題。 –

2

當t_string不以$ HOME開頭時,問題似乎就是這一行。 (parse.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運行,但失敗鐺/ 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 
+0

關於這個確切問題,Homebrew有一個公開的問題,他們得出了同樣的結論:https://github.com/mxcl/homebrew/issues/23470 – lsdr