Почему я не могу создать псевдоним в оболочке 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
В первой оболочке, когда вы пытаетесь определить псевдоним, вы получаете вывод с существующими псевдонимами. Это неправильно, у вас не должно быть вывода, как во второй оболочке. Я воспроизвел ту же проблему, если определил псевдоним под названием 'alias'.
Попытайтесь узнать, что на самом деле выполняется, может быть, просто выполните: встроенный псевдоним
или встроенный псевдоним foo = "echo bar"
, чтобы принудительно использовать команду псевдонима.
У вас есть функция, определенная таким образом в первой оболочке:
alias(){ builtin alias ; }
псевдоним типа
должен подтвердить эту гипотезу.