aliasと入力して、すべてのエイリアスのリストを表示できます。
しかし、関数の場合、私にできるのは自分のgrepだけです.bash_profile
。
これは、そのファイル内のものだけを取得し、補助ファイルで定義されたものや動的に取得したものは取得しません。
現在定義されている関数を見つけるより便利な方法はありますか?
aliasと入力して、すべてのエイリアスのリストを表示できます。
しかし、関数の場合、私にできるのは自分のgrepだけです.bash_profile
。
これは、そのファイル内のものだけを取得し、補助ファイルで定義されたものや動的に取得したものは取得しません。
現在定義されている関数を見つけるより便利な方法はありますか?
回答:
declare -F
関数名と定義は
-f
、declare
組み込みコマンドのオプションとともにリストされる場合があります (Bash Builtinsを参照)。の-F
オプションdeclare
は、関数名のみをリストします(オプションでソースファイルと行番号をリストします)。
shopt -s extdebug
)を有効にし、1つ以上の関数名をdeclare -F
コマンドに指定する必要があるようです。IOWは、extdebugが有効になっている場合でもファイル名/行番号を提供declare -F
しません。これは、ドキュメントからは明らかではなく、IMOでも特に直感的ではありません。
bashシェルを想定:
typeset -f
関数をリストします。
typeset -F
関数名のみをリストします。
Obsolete. See `help declare'.
declare -F
すべての関数の名前が表示されます
type function_name
特定の関数のソースを提供します
declare -F
関数名だけでなく、宣言コマンドを実際に出力します。
$ declare -F
declare -f function1
declare -f function2
を使用compgen -A function
して、関数名のみを出力できます。
$ compgen -A function
function1
function2
compgen -a -A function
compgen -A function | grep "^[a-z]\+" | grep -vE "^dequote|^quote|^in_array"
set | grep " ()"
grepの代わりに、fgrepまたはhgrepを使用することもできます (hgrepは私の個人的なお気に入りです。これはgrepですが、「grep-ped」の結果をハイライトしています。
hgrepはここにあります: ACME Labs hgrep
set | grep " () $" | cut -d' ' -f1
。しかし、他の答えに比べて複雑すぎます。
grep
これは良い解決策ではありません。関数定義に一致する文字列は誤検知を引き起こします。@wjandreaは、他の正規表現と同様に、複数行の文字列によって引き続き捕捉されます。
私はこれについてはまだ専門家ではありませんが、この質問とその答えが欲しいので見つけた後、次のように書きました(「典型的なポールの宣言」の回答に基づいて)。エイリアスと関数の両方のフォーマット済みリスト:
function functionaliaslist() {
echo
echo -e "\033[1;4;32m""Functions:""\033[0;34m"
declare -F | awk {'print $3'}
echo
echo -e "\033[1;4;32m""Aliases:""\033[0;34m"
alias | awk {'print $2'} | awk -F= {'print $1'}
echo
echo -e "\033[0m"
}
それは私がLriの答えを見る前だったので、そこから外挿して、declare
とalias
行をcompgen
代わりに適切なコマンドに置き換えて、以下を取得します。
function functionaliaslist() {
echo
echo -e "\033[1;4;32m""Functions:""\033[0;34m"
compgen -A function
echo
echo -e "\033[1;4;32m""Aliases:""\033[0;34m"
compgen -A alias
echo
echo -e "\033[0m"
}
私が欲しかったもののための御馳走を取りました。他の人を助ける場合に備えて共有します。
他にも多数の「アクション」が利用できますcompgen -A [action]
(compgen
もちろん他のオプションもあります)。ここには、manページへのリンクも含まれている適切な記事が見つかりました(man compgen
場合によっては機能しないため)。