Por que não consigo criar um alias em um shell bash?

Por que não consigo criar um alias em um shell bash?

Em um shell bash, por que não consigo criar um alias

$ alias fooo="echo bac"
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'

$ alias fooo='echo bac'
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'

$ fooo
fooo: command not found

$ alias fooo
bash: alias: fooo: not found

Em outro shell bash, os comandos acima conseguem criar um alias

$ alias fooo="echo bac"
$ fooo
bac

No primeiro shell, se eu iniciar um novo shell (basta digitar bashe pressionar enter) ou iniciar um novo shell de login (type bash -l), os comandos acima também serão bem-sucedidos como no segundo shell.


Em relação à resposta ao aliascomando no primeiro shell

$ which alias
$ whereis alias
alias:
$ builtin alias fooo="echo bac"
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'


$ type alias
alias is a shell builtin
$ type -a alias
alias is a shell builtin

$ unalias alias
bash: unalias: alias: not found

Em relação ao comentário echono primeiro shell

$ echo hello
hello

$ whereis echo
echo: /bin/echo /usr/share/man/man1/echo.1.gz

$ which echo
/bin/echo

Responder1

No primeiro shell, quando você tenta definir um alias, você obtém uma saída com os aliases existentes. Isso está errado, você não deve ter saída como no segundo shell. Reproduzi o mesmo problema se definir um nome alternativo chamado 'alias'.

Tente descobrir o que realmente é executado, talvez apenas execute: builtin aliasou builtin alias foo="echo bar"para forçar o uso do comando alias.

Responder2

Você tem uma função definida dessa forma no primeiro shell:

alias(){ builtin alias ; }

type aliasdeveria confirmar essa hipótese.

informação relacionada