Remove "Last login" message for new tabs in terminal
After some search about it I created a ~/.hushlogin
file and it worked, but only for new windows. Is there a way to make it work for new tabs too?
On Mavericks, creating the empty file ~/.hushlogin
removes the line “Last login”, for new windows and new tabs.
On my Mac it works.
Solution
This is running OS X 10.8.3. I haven't tested it on other versions, but so long as Terminal has the above option, then it should work.
-
In Terminal.app, go to Preferences->Settings and select the profile you're using. Go to the 'Shell' tab and under the 'Startup' heading, check 'Run command:' and enter into the box:
login -fpql your-username /bin/bash
Substitute
your-username
with your actual Unix username. If you use a shell other than the default bash shell, replace/bin/bash
with the full path to that shell (yes, even if you've already set it in Preferences->Startup.) Make sure 'Run inside shell' is unchecked.
If you have the "Prompt before closing: Only if there are processes other than login shell and:" option selected, add "login" and "bash" to the list of processes it will not prompt for.
Make sure you have a
~/.bashrc
file, since this will be the file bash uses on startup from now on rather than~/.bash_profile
. I just have one file reference the other using this method. You also need to be sure it sources /etc/profile.
Explanation
We want to run login
with the -q
option to tell it to supress the "Last login" message, even in the absence of a .hushlogin
file. (As noted above, login
will only look in cwd for that file, not your home directory, so you'd need a .hushlogin
file in every directory you'd open a shell to, for that method to work.)
The problem is Terminal runs something like login -pfl your-username /bin/bash -c exec -la bash /usr/local/bin/bash
when you create a new shell (I'm using homebrew's version of bash, hence the weird bash path at the end,) which lacks the -q
flag.
Unfortunately, there's no way to directly change the arguments Terminal uses, so we just trampoline a new login session with login -pfql
from Terminal's default login -pfl
session. Inelegant, but it works.
We need to have the -q
option and the path to bash to keep the "New windows/tabs open with: Same Working Directory" option working. If you don't care about that option, you can remove that flag and argument, and probably avoid the .bashrc
stuff above.
you could just add a clear
to your .bash_profile
This might be OS version dependent. On Terminal 2.3 (on 10.8), touching the file ~/.hushlogin
suppresses the 'last login' message for new tabs as well as new windows. That is, it Works For Me.
Just in case it helps to work out what's going on (and in case you don't know), note that the 'last login' message is in principle coming from login
(1), and not the shell. Or, more precisely, if a shell is invoked in a particular way (including starting it with the -l
option), then bash will "act as if it had been invoked as a login shell" (zsh may have a similar feature, though I can't find it right now). Now, it could be that when Terminanl opens up a new tab in your OS X version, the shell is effectively simulating opening a login shell, and maybe getting this detail wrong. But if you have the 10.8 version of bash/zsh (namely 3.2.48 / 4.3.11), then I don't know what might be amiss.
Adding ~/.hushlogin
is fine unless you want to open a new tab in the same folder, or open Terminal from Finder on the exact folder, in that case it won't work.
Changing a running command to another login is something I would like to avoid because of the strange unnecessary scheme login -> login -> zsh
. You can see it in Activity Monitor, but also it will show up when you are quitting interactive programs (like, python repl) in the message that python, login and zsh are running.
Putting clear
in ~/.zshrc
is not ideal since on mac it just prints a lot of newlines (and if you scroll back, you'll see them).
The best way that I found up to this point is adding printf '\33c\e[3J'
to ~/.zshrc
(or in Terminal/Preferences/Profiles/Shell/Startup/Run command
with Run inside shell
checked). I chose beginning of ~/.zshrc
file since startup command is running after it and if the ~/.zshrc
file is heavy you can briefly see Last Login message before printf is executed.