文の結果の3番目の項目を解析します。

文の結果の3番目の項目を解析します。

私はこれを持っています:

CD 31 /Users/alexamil/WebstormProjects/oresoftware/botch/botch-shell-overrides.sh

上記のスタイル出力は、次のコマンドで提供されます。

declare -F my_bash_func

結果からファイル名をどのように取得できますか?それは次のとおりです。

file=$(declare -F my_bash_func | grab_3rd_entry)

私は以下を使うべきです:

shopt -s extdebug
declare -F my_bash_func
shopt -u extdebug

しかし、これはMacOSでは動作しません。

shopt -s extdebug
declare -pf my_bash_func
shopt -u extdebug

後者は奇妙なエラーを生成します。

文:my_bash_func:見つかりません

しかし、宣言-Fを使用して関数を見つけることができるので、その-pfオプションが機能しない理由はわかりません。

ベストアンサー1

次の目的で使用できますawk

file=$(declare -F my_bash_func | awk '{print $3}')

または、bash組み込み関数を使用して配列に読み込みます。

func_info=( $(declare -F my_bash_func) )
file=${func_info[2]}
line_number=${func_info[1]}

ただし、declare -F my_bash_func出力はパーサーフレンドリーではありません...関数を含むファイルが相対パスに由来する場合、出力は相対パスのみをextdebug印刷します(もはやそのディレクトリにない場合でも)。また、パスが出力に残っているスペースや印刷できない文字があります(「3番目のフィールド」が正しくない可能性があります...)。

おすすめ記事