
Почему в оболочке 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
должны подтвердить эту гипотезу.