パッケージ ディレクトリを取得する関数を呼び出す bash スクリプトがあります。
呼び出された関数 (_ros_package_find) をデバッグしようとしており、いくつかの echo ステートメントを追加しました。
pkgdir=`_ros_package_find $1`
echo 'debug rosbash first $pkgdir', $pkgdir
function _ros_package_find {
echo 'debug rospackage find', $1
local loc
loc=`export ROS_CACHE_TIMEOUT=-1.0 && rospack find $1 2> /dev/null`
echo 'loc', $?
if [[ $? != 0 ]]; then
return 1
fi
echo $loc
return 0
}
最終的な表示は次のようになります -
debug rosbash first $pkgdir, debug rospackage find, roscpp_tutorials loc, 0 /opt/ros/lunar/share/roscpp_tutorials
'debug rospackage find' が、最後の echo ステートメントの echo ステートメント内に表示されるのに、独自の行内に表示されるのはなぜかわかりません。
答え1
スクリプトにいくつかの変更を加えると、改善される可能性があります (下記のスクリプトの更新バージョンを参照してください)。
Q: 「debug rospackage find」が、最後の echo ステートメントの echo ステートメント内に表示されるのはなぜですか。
A: 次の行の出力:
echo 'debug rosbash first $pkgdir', $pkgdir
次のようになります:
テキスト「debug rosbash first $pkgdir」の後にコマンドの結果が続きます$pkgdir
。_ros_package_find
tempvar
以下の例では、変数にコマンドの実行結果が保持されていることがわかります。ls
実行時にはecho "debug debug", $tempvar
、結果が 1 行取得されます。
$ ls
123 234 345
$ tempvar=$(ls)
$ echo "debug debug", $tempvar
debug debug, 123 234 345
たとえば以下のように2 つ実行するとecho commands
、2 行の出力が得られます。
$ echo "debug debug"; echo $tempvar
debug debug
123 234 345
スクリプトの修正バージョン:
#!/bin/bash
pkgdir=$(_ros_package_find "$1")
echo "debug rosbash first $pkgdir", "$pkgdir"
function _ros_package_find {
echo 'debug rospackage find', "$1"
local loc
loc=$(export ROS_CACHE_TIMEOUT=-1.0 && rospack find "$1" 2> /dev/null)
echo 'loc', $?
if [[ $? != 0 ]]; then
return 1
fi
echo "$loc"
return 0
}