bobbel
bobbel

Reputation: 3357

Execute bash on logon and add alias

When I login to a Linux server per Putty, I want to execute the bash (because the default shell is another) and after that adding an alias.

I tried several combinations of putting exec bash in the .profile and adding alias foo='echo foo' into .bash_profile. But I didn't find out the correct combination. Either the alias wasn't set, or the bash wasn't executed.

So, the question is, in which of these files:

.profile
.bashrc
.bash_profile

do I have to put these commands:

exec bash
alias foo='echo foo'

to run the bash shell and have access to my alias every time I login to the server?

edit: We're using all the same user to login. But I want to execute the bash and adding the alias only for my remote machine. I do already have a suitable if statement for that. I only have to know, where to put these commands!

edit2:

What I have so far in my .profile:

if [ $(who -m | awk '{print $NF}' | grep "myHostName" | wc -l) -eq 1 ]
then
    exec bash
    alias foo='echo foo'
fi

This will execute the bash for only my user. But the alias will be ignored, since I'm starting a new shell and the alias will be probably set in the old shell...

Upvotes: 1

Views: 1751

Answers (3)

Cubiczx
Cubiczx

Reputation: 1115

To set up alias in startup change your .bash_profile Add alias to bash profile:

$ cd
$ sudo nano .bash_profile
$ alias ALIAS_NAME='COMMAND'

Update bash profile

$ source ~/.bash_profile

Upvotes: 0

bobbel
bobbel

Reputation: 3357

Okay, finally I figured it out by myself with the great help of BroSlow.

I wrote the following to my .profile:

if [ $(who -m | awk '{print $NF}' | grep "myHostName" | wc -l) -eq 1 ]
then
  exec bash
fi

and the other part to the .bash_profile:

if [ $(who -m | awk '{print $NF}' | grep "myHostName" | wc -l) -eq 1 ]
then
  alias foo='echo foo'
fi

This solved my problem!

On logon, the .profile will be sourced automatically and will execute the bash. After that the .bash_profile will be sourced due to the fact, that the bash shell will source it's own profile.

However: thanks a lot for the support!

Upvotes: 1

Reinstate Monica Please
Reinstate Monica Please

Reputation: 11583

Going to go out on a limb and guess you want to do this because your default shell isn't bash. Don't. Just change your default shell

> chsh -s /bin/bash

Then put

alias foo='echo foo'

In either ~/.bashrc or ~/.bash_profile

If multiple users are using the same account, you can try to do the following. While logged in, run

> who -a | grep $(ps -p $PPID -o ppid=) | awk '{print $NF}'

This may be system dependent, but on a couple I tried it on, this will get location you're logged in from. Once you have that output, do the following

if [[ $(who -a | grep $(ps -p $PPID -o ppid=) | awk '{print $NF}') == output ]]; then 
  alias foo='echo foo'
done

If you're ssh-ing from multiple computers, then I don't think there is any way to do what you want. Simplest would be to make your own file in the home directory, and then source it manually each time you log in.

e.g.

> touch myfile.txt
> echo "alias foo='echo foo'" >> myfile.txt
> source myfile.txt
> foo
foo

So you would just have to run source myfile.txt each time you log in or just have putty source it by default.

Upvotes: 3

Related Questions