bash シェルでエイリアスを作成できないのはなぜですか?

bash シェルでエイリアスを作成できないのはなぜですか?

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

最初のシェルで、新しいシェルを起動する (と入力してbashEnter キーを押すだけ)、または新しいログイン シェルを起動する (と入力)bash -lと、上記のコマンドは 2 番目のシェルと同様に成功します。


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

最初のシェルでエイリアスを定義しようとすると、既存のエイリアスが出力されます。これは誤りです。2 番目のシェルのように出力は表示されません。「alias」というエイリアス名を定義した場合、同じ問題が再現しました。

実際に何が実行されるかを調べてみてください。おそらく、単に execute: を実行するか、builtin aliasまたはbuiltin alias foo="echo bar"エイリアス コマンドを強制的に使用してください。

答え2

最初のシェルでは次のように関数が定義されています。

alias(){ builtin alias ; }

type aliasその仮説を確認するはずです。

関連情報