Bash zeigt den Druck in derselben Zeile an

Bash zeigt den Druck in derselben Zeile an

Ich habe ein Bash-Skript, das eine Funktion aufruft, um ein Paketverzeichnis abzurufen.
Ich versuche, die aufgerufene Funktion (_ros_package_find) zu debuggen und habe einige Echo-Anweisungen hinzugefügt.

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
}

Die endgültige Anzeige sieht nun folgendermaßen aus:

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

Ich bin nicht sicher, warum „Debug Rospackage Find“ innerhalb der Echo-Anweisung der letzten Echo-Anweisung und nicht in einer eigenen Zeile angezeigt wird.

Antwort1

Ihr Skript könnte von einigen Änderungen profitieren (siehe unten die aktualisierte Version des Skripts).

F: Warum wird „Debug Rospackage Find“ innerhalb der Echo-Anweisung der letzten Echo-Anweisung und nicht in einer eigenen Zeile angezeigt?

A: Die Ausgabe der folgenden Zeile:

echo 'debug rosbash first $pkgdir', $pkgdir

Wird sein:

Der Text "debug rosbash first $pkgdir" gefolgt vom Ergebnis des Befehls, in $pkgdirdem sich der Befehl befindet_ros_package_find

Im folgenden Beispiel können Sie sehen, dass die tempvarVariable das Ergebnis der Ausführung des lsBefehls enthält. Beim Ausführen echo "debug debug", $tempvarerhalten Sie eine Ergebniszeile:

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

Wenn Sie echo commandsunten zwei Beispiele ausführen, erhalten Sie zwei Ausgabezeilen:

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

Geänderte Version Ihres Skripts:

#!/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
}

verwandte Informationen