Eu tenho um script bash que chama uma função para obter um diretório de pacotes.
Estou tentando depurar a função chamada (_ros_package_find) e adicionei algumas instruções de eco.
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
}
Agora, a exibição final fica assim -
debug rosbash first $pkgdir, debug rospackage find, roscpp_tutorials loc, 0 /opt/ros/lunar/share/roscpp_tutorials
Não tenho certeza por que 'debug rospackage find' é exibido na instrução echo da instrução echo final e não em sua própria linha.
Responder1
Seu script pode se beneficiar de algumas modificações (veja abaixo a versão atualizada do script).
P: por que 'debug rospackage find' é exibido na instrução echo da instrução echo final e não em sua própria linha.
A: A saída da seguinte linha:
echo 'debug rosbash first $pkgdir', $pkgdir
Vai ser:
O texto "debug rosbash first $pkgdir" seguido do resultado do comando no $pkgdir
qual está o comando_ros_package_find
No exemplo abaixo você pode ver que a tempvar
variável contém o resultado da execução do ls
comando, ao executar echo "debug debug", $tempvar
- você obterá uma linha de resultado:
$ ls
123 234 345
$ tempvar=$(ls)
$ echo "debug debug", $tempvar
debug debug, 123 234 345
Ao executar dois echo commands
, por exemplo, abaixo - você obterá duas linhas de saída:
$ echo "debug debug"; echo $tempvar
debug debug
123 234 345
Versão modificada do seu script:
#!/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
}