関数が完了するまでに時間が掛かり、機能が配置されている場所を探して、ファイルの場所を編集して関数を自分自身で観察できるようにします。彼は関数本体をシェルに表示することを望みません。関数を含むスクリプトファイルのパスを取得するだけです。私たちのヒッチハイカーは、彼の関数の名前を知っているだけです。answer_life
です。名前からbash関数のパスを取得する
、次のように定義された、彼はファイルuniversal-questions.sh
内の機能を持っている私たちのヒッチハイカーに知らされていないのパスを想像:
function answer_life() {
sleep $(date --date='7500000 years' +%s)
echo "42"
}
をhitchhiker-helper-scripts.sh
と呼ばれる別のスクリプトは、以下に定義されます。それはsource
上記の関数は「その中にdを持っている(。ただ、ボールをプレー、私は推測する、ヒッチハイカーはどちらかsource
を理解していない。):
source "/usr/bin/universal-questions.sh"
function find_life_answer_script() {
# Print the path of the script containing `answer_life`
somecommand "answer_life" # Should output the path of the script containing the function.
}
あなたが来るどこだからこれは、私の勇敢なスクリプターが、あることができます。コメントを、find_life_answer_script
のコードで置き換えて、ヒッチハイカーが関数の場所を見つけることができます。拡張デバッグモードで動作してbashで
完璧な答えを。しかし、すぐに元に戻すために 'shopt'を切り替える大きなファンではありません。それが避けられれば、私はそれを好むだろう。あなたの答えをありがとう! –
サブシェルで実行することで 'shopt'トグルを避けることができます。これには、既存の 'extdebug'設定に影響を与えないという利点があります。回答が更新されました。 – bishop
素晴らしいアイデア!もし私ができれば2倍upvote、ありがとう。答えに対する優れた解説もbtwを編集します。 –