2010-08-02 2 views
2

Dans bash, certaines commandes mettent leur stdout AVANT l'invite de commande et sur la même ligne. Par exemple:bash stdout suivi de l'invite sur la même ligne

$ printf message 
message$ 
$ gettext -d gtk20 File 
Fichier$ 

Je veux le stdout sur une ligne dédiée avec l'invite de commande sur la ligne NEXT. Je pourrais précéder avec « echo » et envelopper dans le dos tiques comme ça, mais je me demande s'il y a une meilleure façon (un arg qui peut être toujours/souvent utilisé, etc.):

$ echo `printf message` 
message 
$ 
$ echo `gettext -d gtk20 File` 
Fichier 
$ 
+1

"Certaines commandes placent leur stdout AVANT l'invite de commande et sur la même ligne" - il semble que vous ayez une fausse impression de l'origine de toute cette sortie. La sortie standard de la commande ('message' dans votre premier exemple) provient de la commande elle-même, mais l'invite provient du shell. La commande n'a rien à voir avec l'impression de l'invite. –

Répondre

2

Essayez d'ajouter un ; printf "\n" ou ; echo après votre commande. Le problème est que votre sortie ne se termine pas avec un saut de ligne.

Vous pouvez également injecter la sortie de la commande dans une seule commande printf "%s\n".

+0

oui. Merci. Voici le cas complexe (sur le monde réel) que cela corrige: $ printf "' ngettext -d gtk20 'Ouverture% d Article' 'Ouverture% d Articles' 5' "5 && echo Ouverture de 5 éléments $ – user389850

2

Vous pouvez définir votre invite pour gérer cela automatiquement.

PS1='$(printf "%$(($(tput cols)-1))s\r")\[email protected]\h [\w]\$ ' 

À partir de this question sur erreur de serveur.

Imprime suffisamment d'espaces pour entourer la fin de la ligne puis un retour chariot (\r) pour revenir à la première colonne. Vous pouvez personnaliser ce qu'il affiche après cela de la même manière que vous le feriez normalement.

Questions connexes