Comment insert un caractère tab dans "dialog"?

J'utilise l'utilitaire "dialog" de Linux pour créer une interface user simple. Cependant, il y a un text dans infobox et je veux insert des caractères de tabulation afin d'aligner correctement le text.

Mais il semble que ce dialog n'accepte pas le caractère de tabulation. En outre, l'option –tab-correct n'a pas aidé. Si j'écris \ t, il apparaît dans \ t dans l'infobox.

dialog --title "Hello" --tab-correct --infobox "tab \t test" 20 100 

Si j'insère un onglet dans la string de command:

 dialog --title "Hello" --tab-correct --infobox "tab test" 20 100 

il apparaît comme un seul espace.

Existe-t-il un moyen d'insert un onglet dans le text d'infobox?

Vous devez utiliser l'option --tab-correct , au lieu de --tab-correct , et insert des tabs littéraux dans votre string, par exemple avec

 "star "$'\t'" end" 

ou en utilisant Ctrlv et en appuyant sur la touche Tab .

Eh bien, je ne sais pas dialog, mais parfois sous Linux quand \ t ne l'interprète pas comme Tab, essayez

"` echo -e "\ t" `"

Essaye ça:

 declare -r TAB="`echo -e "\t"`" echo -e "A${TAB}B" 

La string de command que vous dites qui apparaît comme un seul espace apparaît sous la forme de 8 espaces ici, pas un onglet (mais peut-être que c'est StackExchange).

Déboguer cela peut être un peu délicat. Il y a plusieurs choses qui peuvent ou ne peuvent pas "cuire" les tabs: le terminal, lors de l'insertion du caractère; le shell, lors du traitement de l'input; le mode terminal sous-jacent (mode cuit par rapport au mode brut) et, finalement, se dialog lui-même.

Pour rendre les choses encore plus déroutantes, si vous utilisez echo pour générer un onglet, ou si vous générez un onglet, l'émulateur de terminal a toujours la possibilité de le supprimer.

Un raccourci keyboard courant pour échapper à ce genre de caractères de contrôle est Cv (c'est-à-dire, Control+V , CTRL+V ). Si vous frappez cela, puis onglet, vous pouvez get un onglet réel inséré. Ici avec le GNU bash et urxvt , ça marche.

Correctement déboguer cela nécessite de savoir exactement quel est le problème (c'est-à-dire, ce qui mange l'onglet). Il suffit de mettre \ t, il ne fonctionnera pas à less que la dialog ou votre shell aient la fonctionnalité de traduire ces séquences échappées. Si vous le souhaitez, suivez les conseils de @Eran Ben-Natan et utilisez le mode amélioré de GNU echo (les autres implémentations peuvent différer – il n'y a pas de comportement spécifique spécifié dans POSIX (IEEE 1003.1 2008, page 2615, ligne 84306)).