alias settings nor working at logon
Newly installed hirsute = 21.04. Installed out of the package, created my own personal account, the default .bashrc is present in my homedir and to make sure there is a .bash_aliases too. Both mention
alias ll='ls -alF'
still this alias is not available after logon. Is this a bug or am I missing something?
NAME="Ubuntu"
VERSION="21.04 (Hirsute Hippo)"
karel@schal:~$ pwd ; ls -al .bash*
/home/karel
-rwxr-xr-x 1 karel users 53 Sep 26 06:22 .bash_aliases
-rw------- 1 karel users 9834 Sep 26 06:23 .bash_history
-rw-r--r-- 1 karel users 3771 Aug 31 23:17 .bashrc
karel@schal:~$ cat .bash_aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
karel@schal:~$ ll
ll: command not found
edited after a not-very-friendly comment, to add:
karel@wiske:~$ ssh [email protected]
[email protected]'s password:
Welcome to Ubuntu 21.04 (GNU/Linux 5.11.0-34-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 updates can be applied immediately.
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Last login: Sun Sep 26 09:37:21 2021
karel@schal:~$ alias
karel@schal:~$ /bin/bash
karel@schal:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
and that behaviour is identical, whether logging in per ssh or in the local graphical environment or on a local text-only console (dev/tty5 and similar)
Also, as requested, excerpt from ~/.bashrc:
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
[further edited as requested]
karel@schal:~$ ls -al ~/.bash_profile ~/.bash_login ./.profile
ls: cannot access '/home/karel/.bash_profile': No such file or directory
ls: cannot access '/home/karel/.bash_login': No such file or directory
ls: cannot access './.profile': No such file or directory
karel@schal:~$ ps -p $$ | tail -n1 | awk '{print $NF}'
bash
Solution 1:
When logging in over ssh, you are running what is known as an interactive login shell, and not an interactive non-login shell which is what happens when you open a terminal once logged in. Login shells do not read ~/.bashrc
and instead read ~/.profile
, ~/.bash_profile
and ~/.bash_login
. This is why your aliases are not present. For more details on this and the differences between the initialization files of various shell types, see Why are scripts in /etc/profile.d/ being ignored (system-wide bash aliases)?. This is also why you do get your aliases when you run /bin/bash
since that starts a non-login shell and will read ~/.bashrc
.
That said, Ubuntu's default ~/.profile
file includes these lines:
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
So it should actually be reading your ~/.bashrc
as well. If this isn't happening, I suspect one of the following:
-
You (or someone) have created a
~/.bash_profile
file. That would cause the~/.profile
file to be ignored. As explained inman bash
(emphasis mine):When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes com‐ mands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
So if either
~/.bash_profile
or~/.bash_login
exist, then anything in~/.profile
is ignored. -
You (or someone else) have created your own
~/.profile
which does not source~/.bashrc
. -
You are not actually running
bash
. You can check this by runningps -p $$ | tail -n1 | awk '{print $NF}'
in the shell where you don't have aliases. If the output isn'tbash
, you are running a different shell. Perhaps you've set your default login shell tosh
, which isdash
on Ubuntu. You can check the current value withecho $SHELL
and you can change it withchsh
.
Based on your latest edit, it seems that your case is:
-
You don't have a
~/.profile
for some reason. And, based on your last edit, this seems to be the case. So just copy the default.profile
from/etc/skel
and you should be fine next time you log in:cp /etc/skel/.profile ~/
Solution 2:
@terdon had it right: for some reason or other, there was no .profile in my homedir. All was okay after - as suggested -
cp /etc/skel/.profile ~