Save Terminal from Process Completed in Mac OSX
What’s happening
One day, when I opened up terminal as usual, it showed [Process completed]
and just terminated. I could not type any thing, run any scripts and work on my project. Even worse, this made me unable to install programs into my computer because many installations need to run shell scripts. Okay, I searched over the internet and there was no solution for that. I even peaked many parts in the Mac OSX system to see if there were any mis-configuration, of course nothing helps. After all, I though if there is nothing wrong, it must be something done with my /bin/bash
. And after I upgraded my bash, my lovely terminal came back!
Change shell’s default execution
The truth is, when you open terminal, it execute /bin/bash
. As it is not working now, we need another environment for us to execute stuff. Open Terminal->Preference
, and change Shells open with
manually to /bin/sh
.
Update /bin/bash
Now we are going to download the latest version of bash and replace the old one. Open up a new terminal and now you are able to execute commands. Copy and paste the following codes into the terminal, they will automatically handle everything for you.
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
Once done
Go to Terminal->Preference
again and change Shells open with
back to Default login shell
. Enjoy!
What I did?
Okay, I admit that I did something to the system sometimes ago. I was doing some experiments on sandboxing
and played with “chroot jail” stuff before. That is, I need to create an environment with restricted support to the program I run. So I wrote a sandbox, configured it’s root to a ‘secure’ place (anywhere not the actual root), and copy essential executables to that new root. Well, so far I think I didn’t do anything harm to the system, but I might corrupt the /bin/bash when I copied it to the sandbox root.
Diagnosis
Shell will run the following files before letting user to do anything. Check everyone to see if there are any misconfigurations.
~/.bash_profile
(for/bin/bash
)~/.profile
(for/bin/sh
)/etc/profile
(for/bin/sh
)/etc/bashrc
(for/bin/bash
)- (google for more)
To play with, add some echoes to see if they works. Btw, I love nano more than vi, so try out sudo nano /etc/bashrc
.
Another thing
The code above updates your bash to version 4.2. To check if there is any new version, go to the ftp.