la sortie de `svn status -uq` n'a pas de nouvelles lignes dans le script

0
function runstatus {
    echo "SVN Status -uq:"
    echo 
    status=$(svn status -uq)
    echo $status
    echo $bigline
}

Cela affiche quelque chose comme:

Statut SVN -uq:

rd_backup rd_backup.sh update 764 update Statut par rapport à la révision: 771

Alors que normalement, en exécutant manuellement la commande au lieu de ./update, cela ressemble à:

svn status -uq

M * 764 mise à jour

Statut contre révision: 771

c'est-à-dire avec des nouvelles lignes. Comment puis-je m'assurer que le formatage reste identique et qu'il est lisible lors de l'exécution d'un script?

Paimoe
la source
2
Pourquoi ne pas simplement exécuter svn status -uqau lieu de echola sortie de $(svn status -uq)?
Slhck
Oh ouais ça semble avoir plus de sens en fait
paimoe

Réponses:

4

Si vous voulez qu'une fonction ne montre que le résultat d'une commande, il n'est pas nécessaire de capturer le résultat, puis echo à nouveau.

Il suffit de courir svn status -uqdirectement. La sortie standard sera également sortie de l'appel de fonction.


Si vous avez vraiment besoin d'utiliser des variables et echoles, vous devez citer l'argument passé à echosi vous voulez les espaces blancs à conserver: echo "$status".

La raison en est qu'il $statuscontiendra littéralement les éléments suivants:

M * 764 update
Status against revision: 771

Quand vous courez echo $status, echos'appellera comme ceci:

echo M * 764 update \
Status against revision: 771

C'est plus d'un paramètre, puisque Bash divise les arguments en espaces ( voir$IFS ). echoimprimera chaque argument, séparé par un espace. Ainsi, alors que le reste de la ligne aura l’air parfait, la nouvelle ligne sera - par essence - réduite à un espace.

Si vous entourez l'argument avec une citation, echoil ne le verra que comme un argument et le restituera correctement.

Le Wiki Bash a une bonne lecture sur les citations et énumère quelques raisons pour lesquelles vous devriez toujours citer vos variables à quelques exceptions près.

slhck
la source
Voir "Fractionnement des mots" dans le manuel de bash: gnu.org/software/bash/manual/bashref.html#Word-Splitting
glenn jackman