前提・実現したいこと
trap DEBUG内で、シェルの各実行行を変数${BASH_COMMAND}で取得しようとしているのですが、サブシェル内のコマンド内容が${BASH_COMMAND}に入らず困っています。
※実際にはサブシェル実行前のコマンド内容が${BASH_COMMAND}にセットされています。
今作成しようとしているのは共通関数なので、出来れば実装ファイル内に何度も読み込ませるようなことはしたくないです。
※例えば解決策としてサブシェル内でもう一度trap DEBUGするなどはしたくないです。
■実行結果
引数に存在しないディレクトリを指定して実行します。("test"など)
<想定>
error line:XX sorce_code:"cd $A_dir" exited with status 1.
<実状>
error line:XX sorce_code:"echo "no sach directory."" exited with status 1.
該当のソースコード
#!/bin/sh set -T trap catch ERR trap finally EXIT function catch() { errcode=$? echo "error line:$A_LineNo sorce_code:\"$A_SrcCode\" exited with status $errcode." exit 8 } function finally() { echo FINALLY } trap 'test_exec $LINENO "${BASH_COMMAND}"' DEBUG function test_exec() { set +T A_LineNo=$1 A_SrcCode=$2 } echo pre A_dir=$1 if [ ! -d $A_dir ] ; then echo "no sach directory." fi (cd $A_dir) echo post exit 0
試したこと
「set -T」を使用して取得出来るか試したのですが、どうも取れないようです。
補足情報(FW/ツールのバージョンなど)
■OS情報
[root@web_server cmn_shell]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.4 (Maipo)
■bashバージョン
[root@web_server cmn_shell]# bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
回答2件
あなたの回答
tips
プレビュー