bash выводит вывод на той же строке

bash выводит вывод на той же строке

У меня есть скрипт 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
}

Связанный контент