1

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 karel@192.168.0.210
karel@192.168.0.210'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
11
  • You need to include/source it from your .bashrc. Run alias to list all your available aliases Sep 26 at 6:39
  • Thank you, Pablo. But that had been checked, and is only normal for the "vanilla" default installation. As for the "alias" command, it returns zero output. Sep 26 at 7:31
  • Does it work [temporarily] to add an alias directly on the command line, for example alias rm='rm -i' ? Does it work [persistently] to add an alias into ~/.bashrc, the next time you open a terminal window or text screen with bash?
    – sudodus
    Sep 26 at 8:05
  • 1
    Please edit your questions and i) tell us what happens if you add an alias definition to your ~/.bashrc and not the non-standard ~/.bash_aliases. Does that work? ii) show us the output of echo $SHELL and ps aux -p $$ so we can see what shell you are running. iii) Clarify how you log in. Is this a local system or a remote one? Do you log in via the GUI or perhaps by ssh? Finally, don't tell us "it has been checked". Show us the actual line from your ~/.bashrc that reads the ~/.bash_aliases file since that is not a bash feature, and is an Ubuntu modification.
    – terdon
    Sep 26 at 8:30
  • 1
    Something will be wrong earlier in your .bashrc. Check by moving it out (renaming it) then copying in the system default .bashrc (which indeed is set up to source .bash_aliases): cp /etc/skel/.bashrc .
    – vanadium
    Sep 26 at 10:32
3

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:

  1. You (or someone) have created a ~/.bash_profile file. That would cause the ~/.profile file to be ignored. As explained in man 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.

  2. You (or someone else) have created your own ~/.profile which does not source ~/.bashrc.

  3. You are not actually running bash. You can check this by running ps -p $$ | tail -n1 | awk '{print $NF}' in the shell where you don't have aliases. If the output isn't bash, you are running a different shell. Perhaps you've set your default login shell to sh, which is dash on Ubuntu. You can check the current value with echo $SHELL and you can change it with chsh.


Based on your latest edit, it seems that your case is:

  1. 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 ~/
    
0
1

@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 ~

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.