File yang disalin secara tidak sengaja di / bin / bash di OS X

1

Saya salah menyalin dua file /bin/bash. Ini sekarang membuat terminal saya tidak responsif . Saya sudah mengikuti ini tutorial tetapi tidak membantu.

Untuk referensi, file-nya adalah runcocoa.sh dan runc.sh untuk lebih spesifik, dari ini tutorial ). Saya juga menyalinnya ke /usr/local/bin, tapi kemudian saya menghapusnya ...

Bagaimana saya bisa mengembalikan fungsionalitas sistem saya?

abbood
sumber
Sudahkah Anda mencoba terminal emulator lain, seperti iterm atau katoda?
Szymon Szydełko

Jawaban:

4

saya pergi ke Terminal »Preferensi» Startup dan berubah Kerang terbuka dengan dari Shell login default untuk Perintah , dan menggunakan shell lain (mis. /bin/csh daripada yang asli saya /bin/bash ).

Ini membuat terminal saya berfungsi kembali - dan menggunakan ini tutorial, saya menginstal versi Bash yang lebih baru untuk menggantikan /bin/bash Saya awalnya menimpa.

Saya memotong dan menempelkan garis-garis ini:

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

Dan dilakukan!

abbood
sumber
Ini hanya memperbaiki gejala Anda, bukan masalah sebenarnya. Mengubah Bash 3.x ke sistem-standar mungkin membuat Anda mengalami masalah lain saat Anda pergi ... Anda sebaiknya menyimpan data dan menginstal ulang OS X, atau memulihkan dari cadangan Time Machine.
slhck
@slhck ugh .. itu tidak nyaman .. tapi yang tidak saya mengerti adalah bagaimana cara menyalin file ke lokasi tertentu menyebabkan begitu banyak kerusakan pada terminal saya? bukankah tindakan itu tidak dapat dibatalkan (dengan asumsi saya dapat menemukan file-file itu)? menginstal ulang OSX sepertinya seperti pembunuhan berlebihan
abbood
Anda tidak hanya menyalin, Anda menimpa /bin/bash dan dihapus bash dari sistem Anda. Terminal bekerja bash jadi kalau tidak ada bash Anda tidak mendapatkan terminal. Anda harus dapat menginstal ulang bash Anda dihapus dengan mengganti bash-4.2.tar.gz di URL FTP dalam jawaban Anda dengan yang sesuai bash versi untuk sistem Anda atau salin /bin/bash dari cadangan Anda. Saya tidak OSX tetapi ini harus bekerja. @lhck, apakah aku salah?
terdon
3
Saya memutakhirkan /bin/bash ke 4.2 beberapa waktu lalu (Gunung Singa) dan belum memiliki masalah. Saya menyimpan cadangan dari yang asli (tentu saja) kalau-kalau ada sesuatu yang muncul, tetapi 4.2 tampaknya cukup kompatibel ke belakang sehingga skrip sistem apa pun yang mengandalkannya tidak gagal, setahu saya.
MattDMo
@terdon Jika OP hanya menimpa itu, tentu saja itu dapat dimasukkan kembali dari cadangan dengan mudah. Tidak jelas apa yang sebenarnya mereka lakukan di tempat pertama, jadi saya mengambil rute yang aman :)
slhck
1

Seperti disebutkan dalam jawaban lain, Anda dapat menggunakan Terminal dengan mengubah perintah yang terbuka dengan shell seperti / bin / sh:

Binari / bin / sh dan / bin / bash hampir identik, jadi Anda bisa menyalin / bin / sh over / 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

Sebagian besar perbedaan antara / bin / sh dan / bin / bash bergantung pada nama yang digunakan shell. Pada platform lain / bin / sh adalah symlink ke / bin / bash. Lihat pertanyaan ini .

Partisi pemulihan juga termasuk biner bash. Ini lebih kecil karena tidak mendukung i386, tetapi identik dengan biner yang dibuat oleh lipo -thin x86_64 /bin/bash -output /tmp/bash pada instalasi saya.

$ 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
$ 
Lri
sumber