「呼び出し元」コマンドとは何ですか?


12

Ubuntu上でopenboxを実行してUbuntu 10.10を実行しています。私は今日、というコマンドに気付きましたcallerが、manページはなく、入力(または--help)に応答せず、whereisはそれを見つけません。

それは何ですか?

回答:


16

走る

type caller

シェルが組み込まれていることがわかります。ランニング

help caller

bashのマニュアルページにも報告されている機能が表示されます。簡単に

Return the context of the current subroutine call.


3
驚くばかり。そのコマンドが何をするのかを学習しただけでなく、「タイプ」コマンドも学習しました。ありがとう:)

2
TIL bashには組み込みhelpコマンドがあります
-nibot

答えだけでなくプロセスも教えるために2回賛成できました。
dmckee ---元モデレーター子猫

@Muu、@nibot、@dmckee:またtype typetype helphelp typeおよびhelp help実行するために楽しいことができ:)
enzotib

10

callerBashのバージョン3.0に現れ、それがアクティブなサブルーチン呼び出しのコンテキストを返す(POSIXによって指定されていない)組み込みコマンドです。詳細については、Bash-Builtinsを参照してください。

構文:

caller [FRAMENUMBER]

フレーム番号が負でない整数として提供される場合、現在の実行呼び出しスタック内のその位置に対応する行番号、サブルーチン名、およびソースファイルが表示されます。

パラメーターを指定しない場合、呼び出し元は現在のサブルーチン呼び出しの行番号とソースファイル名を表示します。

Bash Hackers Wikiで次の簡単なスタックトレースを確認してください。

#!/bin/bash

die() {
  local frame=0
  while caller $frame; do
    ((frame++));
  done
  echo "$*"
  exit 1
}

f1() { die "*** an error occured ***"; }
f2() { f1; }
f3() { f2; }

f3

出力:

12 f1 ./callertest.sh
13 f2 ./callertest.sh
14 f3 ./callertest.sh
16 main ./callertest.sh
*** an error occured ***

die適度に複雑なスクリプトでエラーを追跡するための適切な関数のサンプルを次に示します。

{ bash /dev/stdin; } <<<$'f(){ g; }\ng(){ h; }\nh(){ while caller $((n++)); do :; done; }\nf'

より高度なデバッグのために、Bashの拡張デバッグ機能と、呼び出し元より詳細な情報を提供する特別なパラメーター(例BASH_ARG{C,V})を利用できます。Bashdbなどのツールは、Bashのより高度なデバッグ機能の使用を支援できます。


2

これはシェル組み込みコマンドです:(man bashその後、 'caller'を検索し
ます)スタックトレースの出力に使用できます。


彼が私に「タイプ」を教えたので、私はenzotibの答えを選んだけれどもありがとう。しかし、多くの感謝:)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.