
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 bash
e 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 alias
comando 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 echo
no 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 alias
ou 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 alias
deveria confirmar essa hipótese.