(all)に似type
たオプション (follow) で呼び出すことを想像します。-f
-a
ここに私の質問があります:
bash
コマンドを実行する方法を出力するための Bash 組み込みはありますか?- シェルがコマンドを実行する方法を出力する Linux ユーティリティはありますか?
- 私が使用している以下のシェル関数を簡略化できますか?
次の定義と/usr/local/bin/ls
へのリンクを考えると/usr/bin/ls
:
alias ls="\ls -h --color=auto"
alias lsa="ls -A"
alias lsh="lsa -I'*'"
rcommand lsh
プリント:
alias lsh='lsa -I'\''*'\'''
alias lsa='ls -A'
alias ls='\ls -h --color=auto'
link /usr/local/bin/ls
file /usr/bin/ls
.bashrc ファイルで定義したシェル関数は次のとおりです。
function rcommand {
declare -r a="${1#\\}"
declare -r b="$(type -t "$a")"
if [[ "$b" == alias && "$a" == "$1" ]]; then
declare -r c="$(command -v "$a")"
echo "$c"
declare -r d="$(echo "$c" | sed "s/^.*='\\\\\\?\(\w\+\).*$/\1/")"
if [[ "$d" == "$a" ]]; then
rcommand "\\$d"
else
rcommand "$d"
fi
elif [[ "$b" == builtin || "$b" == function || "$b" == keyword ]]; then
echo "$b $a"
else
declare -r c="$(declare -F "$a")"
if [[ "$c" == "$a" ]]; then
echo "function $a"
else
declare -r d="$(type -P "$a")"
if [[ -h "$d" ]]; then
echo "link $d"
rcommand "$(readlink "$d")"
elif [[ -e "$d" ]]; then
echo "file $d"
fi
fi
fi
}