У меня есть сценарий удара, который вызывает функцию для получения каталога пакета.
Я пытаюсь отладить вызванную функцию (_ros_package_find) и добавил некоторые операторы эха.
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
Не уверенный, то, почему 'отладка rospackage находит', отображено в операторе эха заключительного оператора эха а не в его собственной строке.
Ваш сценарий мог бы извлечь выгоду из некоторых модификаций (см. ниже обновленной версии сценария).
Q: то, почему 'отладка rospackage находит', отображено в операторе эха заключительного оператора эха а не в его собственной строке.
A: Вывод следующей строки:
echo 'debug rosbash first $pkgdir', $pkgdir
Будет:
Текст "отладка rosbash первый $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
}