Почему я не могу создать псевдоним в оболочке bash?

Почему я не могу создать псевдоним в оболочке bash?

Почему в оболочке bash я не могу создать псевдоним?

$ 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

В другой оболочке bash приведенные выше команды успешно создают псевдоним

$ alias fooo="echo bac"
$ fooo
bac

В первой оболочке, если я запускаю новую оболочку (просто набираю bashи нажимаю Enter) или запускаю новую оболочку входа (набираю bash -l), вышеуказанные команды также успешно выполняются, как и во второй оболочке.


Относительно ответа на aliasкоманду в первой оболочке

$ 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

Относительно комментария echoв первой оболочке

$ echo hello
hello

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

$ which echo
/bin/echo

решение1

В первой оболочке, когда вы пытаетесь определить псевдоним, вы получаете вывод с существующими псевдонимами. Это неправильно, у вас не должно быть вывода, как во второй оболочке. Я воспроизвел ту же проблему, если я определил имя псевдонима с именем 'alias'.

Попробуйте выяснить, что на самом деле выполняется, может быть, просто выполнить: builtin aliasили builtin alias foo="echo bar"принудительно использовать псевдоним команды.

решение2

У вас есть функция, определенная таким образом в первой оболочке:

alias(){ builtin alias ; }

type aliasдолжны подтвердить эту гипотезу.

Связанный контент