私はこれを持っています:
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番目のフィールド」が正しくない可能性があります...)。