
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 bash
und 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- alias
Befehls 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 echo
in 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 alias
oder 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 alias
sollte diese Hypothese bestätigen.