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以外の条件なのかはわかりません。