1

Я по ошибке скопировал два файла поверх /bin/bash . Теперь мой терминал не отвечает . Я следовал этому уроку, но это не помогло.

Для справки, файлы - это runcocoa.sh и runc.sh а именно из этого руководства). Я также скопировал их в /usr/local/bin , но затем удалил их…

Как я могу восстановить функциональность моей системы?

2 ответа2

4

Я перешел в « Терминал» »« Настройки »,« Автозагрузка » и изменил« Оболочки », открытые из« Оболочки входа по умолчанию », в« Команду » и использовал другую оболочку (например, /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

И сделано!

1

Как упоминалось в другом ответе, вы можете использовать Терминал, изменив команду, с которой открываются оболочки, на что-то вроде /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 зависят от имени, с которым была вызвана оболочка. На других платформах /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
$ 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .