bash muestra imprimir en la misma línea

bash muestra imprimir en la misma línea

Tengo un script bash que llama a una función para obtener un directorio de paquetes.
Estoy intentando depurar la función llamada (_ros_package_find) y agregué algunas declaraciones 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
}

Ahora, la pantalla final se ve así:

debug rosbash first $pkgdir, debug rospackage find, roscpp_tutorials loc, 0 /opt/ros/lunar/share/roscpp_tutorials

No estoy seguro de por qué la 'búsqueda de rospackage de depuración' se muestra dentro de la declaración de eco de la declaración de eco final y no dentro de su propia línea.

Respuesta1

Su secuencia de comandos podría beneficiarse de algunas modificaciones (consulte la versión actualizada de la secuencia de comandos a continuación).

P: ¿Por qué la 'búsqueda de rospackage de depuración' se muestra dentro de la declaración de eco de la declaración de eco final y no dentro de su propia línea?

R: El resultado de la siguiente línea:

echo 'debug rosbash first $pkgdir', $pkgdir

Será:

El texto "debug rosbash first $pkgdir" seguido del resultado del comando en $pkgdirel que se encuentra el comando_ros_package_find

En el siguiente ejemplo, puede ver que la tempvarvariable contiene el resultado de ejecutar el lscomando; cuando lo ejecute echo "debug debug", $tempvar, obtendrá una línea de resultado:

$ ls
123  234  345
$ tempvar=$(ls)
$ echo "debug debug", $tempvar
debug debug, 123 234 345

Cuando ejecute dos echo commands, por ejemplo a continuación, obtendrá dos líneas de salida:

$ echo "debug debug"; echo $tempvar
debug debug
123 234 345

Versión modificada de su 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
}

información relacionada