Warum kann ich in einer Bash-Shell keinen Alias ​​erstellen?

Warum kann ich in einer Bash-Shell keinen Alias ​​erstellen?

Warum kann ich in einer Bash-Shell keinen Alias ​​erstellen?

$ 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

In einer anderen Bash-Shell können mit den obigen Befehlen erfolgreich ein Alias ​​erstellt werden

$ alias fooo="echo bac"
$ fooo
bac

Wenn ich in der ersten Shell eine neue Shell starte (einfach eingeben bashund die Eingabetaste drücken) oder eine neue Login-Shell starte (eingeben bash -l), sind die obigen Befehle genauso erfolgreich wie in der zweiten Shell.


Bezüglich des Reply-On- aliasBefehls in der ersten 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

Bezüglich des Kommentars echoin der ersten Shell

$ echo hello
hello

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

$ which echo
/bin/echo

Antwort1

Wenn Sie in der ersten Shell versucht haben, einen Alias ​​zu definieren, erhalten Sie eine Ausgabe mit den vorhandenen Aliasen. Das ist falsch, Sie sollten keine Ausgabe wie in der zweiten Shell erhalten. Ich habe das gleiche Problem reproduziert, wenn ich einen Aliasnamen namens „Alias“ definiere.

Versuchen Sie herauszufinden, was tatsächlich ausgeführt wird. Führen Sie ggf. einfach „execute:“ aus builtin aliasoder builtin alias foo="echo bar"erzwingen Sie die Verwendung des Alias-Befehls.

Antwort2

Sie haben in der ersten Shell eine folgendermaßen definierte Funktion:

alias(){ builtin alias ; }

type aliassollte diese Hypothese bestätigen.

verwandte Informationen