シェルで定義されている関数を一覧表示するにはどうすればよいですか?


221

aliasと入力して、すべてのエイリアスのリストを表示できます。

しかし、関数の場合、私にできるのは自分のgrepだけです.bash_profile

これは、そのファイル内のものだけを取得し、補助ファイルで定義されたものや動的に取得したものは取得しません。

現在定義されている関数を見つけるより便利な方法はありますか?



2
@AlastairIrvineノミネートの重複ありがとうございます。しかし、私はそれを逆に解決しました。この質問には、非常に多くの意見と賛成票があり、回答の幅広い選択肢があります。そして、あなたの指名された複製に対する受け入れられた答えは明らかに曖昧であり、間違いなく間違いです。
tripleee 2018年

回答:


271

declare -F

関数名と定義は-fdeclare組み込みコマンドのオプションとともにリストされる場合があります (Bash Builtinsを参照)。の-Fオプションdeclare は、関数名のみをリストします(オプションでソースファイルと行番号をリストします)。

Bashリファレンスマニュアル


1
GNU bash 4.3.46(1)-release(x86_64-pc-linux-gnu)で-Fは名前を一覧表示します/ -fは関数全体を一覧表示します
ceph3us

5
「オプションの」ソースファイル/行番号を取得するには、extdebug(shopt -s extdebug)を有効にし、1つ以上の関数名をdeclare -Fコマンドに指定する必要があるようです。IOWは、extdebugが有効になっている場合でもファイル名/行番号を提供declare -Fしませ。これは、ドキュメントからは明らかではなく、IMOでも特に直感的ではありません。
Ron Burk、2017年

より良い解決策については、以下の@ user495470の回答を参照してください。
starbeamrainbowlabs

82

bashシェルを想定:

typeset -f

関数をリストします。

typeset -F

関数名のみをリストします。


8
私のbash v4.1.17(9)-releaseのObsolete. See `help declare'.
コメント

5
それが同義語であることを知っておくのはまだいいことです。
bmacnaughton 2015


51

declare -F 関数名だけでなく、宣言コマンドを実際に出力します。

$ declare -F
declare -f function1
declare -f function2

を使用compgen -A functionして、関数名のみを出力できます。

$ compgen -A function
function1
function2

6
compgen -A function私が探していたものでした。

2
いいね!私の場合もエイリアスが欲しかったです...エイリアスと関数の両方を取得できますcompgen -a -A function
Matt Byrne

+1と私は(Linux Debianで)私の個人的な機能のみを出力するために以下を使用しました:compgen -A function | grep "^[a-z]\+" | grep -vE "^dequote|^quote|^in_array"
Dmytro Dzyubak

30

タイプセットは廃止されました。使用してください:

declare -f

または

declare -f function_name

または

type function_name

4
set | grep " ()"

grepの代わりに、fgrepまたはhgrepを使用することもできます (hgrepは私の個人的なお気に入りです。これはgrepですが、「grep-ped」の結果をハイライトしています。

hgrepはここにあります: ACME Labs hgrep


1
これにより、関数だけでなく、値に「()」を持つ変数もリストされます
Alois Mahdal

2
@AloisMahdalこれが機能するものですset | grep " () $" | cut -d' ' -f1。しかし、他の答えに比べて複雑すぎます。
wjandrea 2016

5
grepこれは良い解決策ではありません。関数定義に一致する文字列は誤検知を引き起こします。@wjandreaは、他の正規表現と同様に、複数行の文字列によって引き続き捕捉されます。
マット

1

私はこれについてはまだ専門家ではありませんが、この質問とその答えが欲しいので見つけた後、次のように書きました(「典型的なポールの宣言」の回答に基づいて)。エイリアスと関数の両方のフォーマット済みリスト:

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の答えを見る前だったので、そこから外挿して、declarealias行を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場合によっては機能しないため)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.