答案1
我去了终端 » 偏好设置 » 启动并改变了贝壳打开从默认登录 shell到命令,并使用另一个shell(例如,/bin/csh
而不是我原来的/bin/bash
)。
这使我的终端再次正常运行 - 并且使用这教程中,我安装了较新版本的 Bash 来替换/bin/bash
我最初覆盖的版本。
我剪切并粘贴了以下几行:
curl -LO ftp://ftp.cwru.edu/pub/bash/bash-4.2.tar.gz
tar zxvf bash-4.2.tar.gz
cd bash-4.2
./configure && make && sudo make install
chsh -s /usr/local/bin/bash {user_name}
sudo bash -c "echo /usr/local/bin/bash >> /private/etc/shells"
cd /bin
sudo mv bash bash-old
sudo ln -s /usr/local/bin/bash bash
并做了!
答案2
正如另一个答案中提到的,您可以通过将 shell 打开的命令更改为 /bin/sh 之类的命令来使用终端:
/bin/sh 和 /bin/bash 二进制文件几乎相同,因此您只需将 /bin/sh 复制到 /bin/bash 上即可。
$ diff -y --suppress-common-lines -W 80 <(strings /bin/bash) <(strings /bin/sh)
> /bin/bash
${FCEDIT:-${EDITOR:-ed}} | ${FCEDIT:-ed}
@(#)PROGRAM:bash PROJECT:bash-86.1 | @(#)PROGRAM:sh PROJECT:bash-86.1
/bin/sh 和 /bin/bash 之间的大部分差异取决于调用 shell 的名称。在其他平台上,/bin/sh 是指向 /bin/bash 的符号链接。请参阅这个问题。
恢复分区还包含一个 bash 二进制文件。由于不支持 i386,所以它比较小,但它与lipo -thin x86_64 /bin/bash -output /tmp/bash
我在安装时创建的二进制文件相同。
$ diskutil mount 'Recovery HD'
$ hdiutil mount /Volumes/Recovery\ HD/com.apple.recovery.boot/BaseSystem.dmg
$ stat -f %z /bin/bash /Volumes/OS\ X\ 10.8.2\ Base\ System/bin/bash
1333920
699040
$ file /bin/bash
/bin/bash: Mach-O universal binary with 2 architectures
/bin/bash (for architecture i386): Mach-O executable i386
/bin/bash (for architecture x86_64): Mach-O 64-bit executable x86_64
$ file /Volumes/OS\ X\ 10.8.2\ Base\ System/bin/bash
/Volumes/OS X 10.8.2 Base System/bin/bash: Mach-O 64-bit executable x86_64
$ lipo -thin x86_64 /bin/bash -output /tmp/bash
$ stat -f %z /tmp/bash
699040
$ diff /tmp/bash /Volumes/OS\ X\ 10.8.2\ Base\ System/bin/bash
$