¿Por qué no puedo crear un alias en un shell bash?

¿Por qué no puedo crear un alias en un shell bash?

En un shell bash, ¿por qué no puedo crear un 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

En otro shell bash, los comandos anteriores logran crear un alias

$ alias fooo="echo bac"
$ fooo
bac

En el primer shell, si comienzo un nuevo shell (simplemente escribo bashy presiono enter), o comienzo un nuevo shell de inicio de sesión (escribo bash -l), los comandos anteriores también funcionan como en el segundo shell.


Respecto a la respuesta al aliascomando en el primer 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

Respecto al comentario echoen el primer shell.

$ echo hello
hello

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

$ which echo
/bin/echo

Respuesta1

En el primer shell, cuando intentaste definir un alias, obtienes un resultado con los alias existentes. Esto está mal, no debería tener resultados como en el segundo shell. He reproducido el mismo problema si defino un nombre de alias llamado 'alias'.

Intente averiguar qué se ejecuta realmente, tal vez simplemente ejecute: builtin aliaso builtin alias foo="echo bar"forzar el uso del comando alias.

Respuesta2

Tienes una función definida de esa manera en el primer shell:

alias(){ builtin alias ; }

type aliasdebería confirmar esa hipótesis.

información relacionada