bash exibe impressão na mesma linha

1

Eu tenho um script bash que chama uma função para obter um diretório de pacotes.
Eu estou tentando depurar a função chamada (_ros_package_find) e adicionei algumas instruções de eco.

pkgdir='_ros_package_find '
echo 'debug rosbash first $pkgdir', $pkgdir


function _ros_package_find {
    echo 'debug rospackage find', 
    local loc
    loc='export ROS_CACHE_TIMEOUT=-1.0 && rospack find  2> /dev/null'
    echo 'loc', $?
    if [[ $? != 0 ]]; then
        return 1
    fi
    echo $loc
    return 0
}

Agora, a exibição final é assim -

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

Não tenho certeza, porque o 'debug rospackage find' é exibido dentro da instrução echo da instrução echo final e não dentro de sua própria linha.

    
por user1050619 12.03.2018 / 13:04

1 resposta

1

Seu script pode se beneficiar de algumas modificações (veja abaixo a versão atualizada do script).

P: por que o 'debug rospackage find' é exibido dentro da instrução echo da instrução echo final e não dentro de sua própria linha.

A: A saída da seguinte linha:

echo 'debug rosbash first $pkgdir', $pkgdir

Será:

O texto "debug rosbash first $ pkgdir" seguido pelo resultado do comando em $pkgdir , que é o comando _ros_package_find

No exemplo abaixo, você pode ver que a variável tempvar contém o resultado da execução do comando ls , 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ê terá 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 "")
echo "debug rosbash first $pkgdir", "$pkgdir"

function _ros_package_find {
    echo 'debug rospackage find', ""
    local loc
    loc=$(export ROS_CACHE_TIMEOUT=-1.0 && rospack find "" 2> /dev/null)
    echo 'loc', $?
    if [[ $? != 0 ]]; then
        return 1
    fi
    echo "$loc"
    return 0
}
    
por Yaron 12.03.2018 / 13:26