У меня есть скрипт 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, а не в отдельной строке.
A: Вывод следующей строки:
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
}