/etc/profile.dのどのファイルがCentOS 7.9で提供され、どの順序で提供されますか? (エイリアスを定義するために使用されます)

/etc/profile.dのどのファイルがCentOS 7.9で提供され、どの順序で提供されますか? (エイリアスを定義するために使用されます)

CentOS 7.9のエイリアス/環境変数に関する質問があります。 llのエイリアスを作成しようとしています。

echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/Z-alias-ll.sh

ただし、これを実行してコンソールを再起動した後(私は新しいDigitalOcean CentOS 7.9 DropletとそのDropletコンソールを使用しています)、「llを入力」すると次のように表示されます。

ll is aliased to `ls -l --color=auto'

grepを使用してフォルダ内の "alias ll"文字列を検索するとき:

grep -rnw /etc/profile.d -e 'alias ll'

colorls.shとcolors.cshという2つのファイルが提供されています。

/etc/profile.d/Z-alias-ll.sh:1:alias ll="ls -alhF --color=auto"
/etc/profile.d/colorls.csh:13:alias ll 'ls -l'
/etc/profile.d/colorls.csh:66:alias ll 'ls -l --color=auto'
/etc/profile.d/colorls.sh:9:  alias ll='ls -l' 2>/dev/null
/etc/profile.d/colorls.sh:55:alias ll='ls -l --color=auto' 2>/dev/null

このファイルを移動または削除すると、私のエイリアスが機能します。だからファイルが私のエイリアスを上書きしていると思います。しかし、ファイル名の前にZを付けたので、後者は後で選択されると思ったので前者を上書きすると思いました。 Ubuntu方式で動作する方式なので、c*の後にZ*を付けました。

たぶん私が逆さまに行っていると思ってこうもしました。

echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/0-alias-ll.sh
echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/-alias-ll.sh
echo 'alias ll="ls -alhF --color=auto"' > /etc/profile.d/alias-ll.sh

しかし、コンソールを再起動しても、「type ll」はまだ「llは `ls -l --color = auto 'のエイリアスです」と表示されます。

最後にインポートするファイル名をテストするために、次のようにしました。

echo 'alias testalias="ls -a"' > /etc/profile.d/0-alias-testalias.sh
echo 'alias testalias="ls -lh"' > /etc/profile.d/alias-testalias.sh
echo 'alias testalias="ls -F"' > /etc/profile.d/Z-alias-testalias.sh

再起動後に「testalias 入力」を実行すると、「testalias のエイリアスは 'ls -lh' です」と表示されます。したがって、最後に取得したのはalias-testalias.shファイルです。しかし、アルファベットの順に他の2つの間にあるので、これがなぜそうなのか理解できません。

私の/root/.bashrcには次のものがあります。

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

よくわかりませんが、/etc/bashrcのこの部分が/etc/profile.dファイルをインポートしているようです。

SHELL=/bin/bash
# Only display echos from profile.d scripts if we are no login shell
# and interactive - otherwise just process them to set envvars
for i in /etc/profile.d/*.sh; do
    if [ -r "$i" ]; then
        if [ "$PS1" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

sort.sh ファイルを作成しました。

for i in /etc/profile.d/*.sh; do
     echo $i
done

その後、「bash sort.sh」を実行すると、次のようになります。

/etc/profile.d/0-alias-ll.sh
/etc/profile.d/0-alias-testalias.sh
/etc/profile.d/256term.sh
/etc/profile.d/-alias-ll.sh
/etc/profile.d/alias-ll.sh
/etc/profile.d/alias-testalias.sh
/etc/profile.d/colorgrep.sh
/etc/profile.d/colorls.sh
/etc/profile.d/lang.sh
/etc/profile.d/less.sh
/etc/profile.d/which2.sh
/etc/profile.d/Z-alias-ll.sh
/etc/profile.d/Z-alias-testalias.sh

colorls.sh は、別名 ll="ls -alhF --color=auto" を定義しようとする他のファイルの間にあります。

ここで購入注文はどのように行われますか?ファイル名"colorls.sh"が0-alias-ll.sh、-alias-ll.sh、alias-ll.sh、Z-alias-ll.shに由来する理由は何ですか?アルファベット順には中間にありますが、私のsort.shファイルは中間にソートします。

/etc/bashrcに "if"条件がありますか?これらの条件が正確に何をしているのか、if以外の条件なのかはわかりません。

関連情報