我有一个 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
您的脚本可能会受益于一些修改(请参阅下面脚本的更新版本)。
问:为什么“debug rospackage find”显示在最后一个 echo 语句的 echo 语句中,而不是在它自己的行内。
答:以下行的输出:
echo 'debug rosbash first $pkgdir', $pkgdir
将:
文本“debug rosbash first $pkgdir”后跟命令的结果,其中$pkgdir
是命令_ros_package_find
在下面的例子中,您可以看到变量tempvar
保存了运行命令的结果ls
,运行时echo "debug debug", $tempvar
您将得到一行结果:
$ ls
123 234 345
$ tempvar=$(ls)
$ echo "debug debug", $tempvar
debug debug, 123 234 345
当运行echo commands
下面两个例如时 - 你会得到两行输出:
$ 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
}