패키지 디렉터리를 가져오는 함수를 호출하는 bash 스크립트가 있습니다.
호출된 함수(_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
왜 '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
한 줄의 결과를 얻게 됩니다.
$ 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
}