为什么我无法在 bash shell 中创建别名?

为什么我无法在 bash shell 中创建别名?

在 bash shell 中,为什么我不能创建别名

$ 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 shell中,上述命令成功创建别名

$ alias fooo="echo bac"
$ fooo
bac

在第一个 shell 中,如果我启动一个新 shell(只需键入bash并按 Enter 键),或启动一个新的登录 shell(键入bash -l),上述命令也会像在第二个 shell 中一样成功。


alias关于第一个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

echo关于第一个 shell 中的评论

$ echo hello
hello

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

$ which echo
/bin/echo

答案1

在第一个 shell 上,当您尝试定义别名时,您会得到包含现有别名的输出。这是错误的,您应该没有像第二个 shell 那样的输出。如果我定义一个名为“alias”的别名,我会重现同样的问题。

尝试找出实际执行的内容,也许只是执行:builtin aliasbuiltin alias foo="echo bar"强制使用别名命令。

答案2

您在第一个 shell 中以这种方式定义了一个函数:

alias(){ builtin alias ; }

type alias应该证实这个假设。

相关内容