Ich verwende das Linux-Dienstprogramm „Dialog“, um eine einfache Benutzeroberfläche zu erstellen. Allerdings befindet sich in der Infobox ein Text, und ich möchte Tabulatorzeichen einfügen, um den Text richtig auszurichten.
Aber anscheinend akzeptiert dieser Dialog kein Tabulatorzeichen. Auch die Option --tab-correct hat nicht geholfen. Wenn ich \t schreibe, erscheint es in der Infobox bei \t.
dialog --title "Hello" --tab-correct --infobox "tab \t test" 20 100
Wenn ich in die Befehlszeichenfolge einen Tabulator einfüge:
dialog --title "Hello" --tab-correct --infobox "tab test" 20 100
es wird als einzelnes Leerzeichen angezeigt.
Gibt es eine Möglichkeit, einen Tabulator in den Infobox-Text einzufügen?
Antwort1
Sie sollten die --no-collapse
Option anstelle von verwenden --tab-correct
und wörtliche Tabulatoren in Ihren String einfügen, zum Beispiel mit
"star "$'\t'" end"
oder mit Ctrl- vund Drücken der TabTaste.
Antwort2
Nun, ich kenne den Dialog nicht, aber manchmal in Linux, wenn \t nicht als Tab interpretiert wird, versuchen Sie
"`echo -e "\t"`"
Versuche dies:
declare -r TAB="`echo -e "\t"`"
echo -e "A${TAB}B"
Antwort3
Die Befehlszeichenfolge, die Ihrer Aussage nach als einzelnes Leerzeichen angezeigt wird, wird hier als 8 Leerzeichen und nicht als Tabulator angezeigt (aber vielleicht ist das bei StackExchange so).
Das Debuggen kann etwas schwierig sein. Es gibt mehrere Dinge, die Tabs „kochen“ können oder nicht: das Terminal beim Einfügen des Zeichens; die Shell beim Verarbeiten der Eingabe; der zugrunde liegende Terminalmodus (Cooked-Modus vs. Raw-Modus) und letztendlich der Dialog selbst.
Um die Sache noch verwirrender zu machen: Wenn Sie Echo zum Generieren einer Registerkarte verwenden oder auf andere Weise eine Registerkarte generieren, besteht immer noch die Möglichkeit, dass der Terminalemulator beschließt, dies zu löschen.
Eine häufig verwendete Tastenkombination zum Ausblenden dieser Art von Steuerzeichen ist C-v
(also Control+V
, CTRL+V
). Wenn Sie diese Taste drücken und dann die Tabulatortaste, wird möglicherweise ein echter Tabulator eingefügt. Hier mit den GNU- bash
und urxvt
funktioniert es.
Um dies richtig zu debuggen, müssen Sie wissengenauwas ist das Problem (das heißt, was frisst die Registerkarte). Einfach \t dort einzugeben, funktioniert nicht, es sei denn, dialog
Ihre Shell verfügt über die Funktion, diese Escape-Sequenzen zu übersetzen. Wenn Sie diese möchten, befolgen Sie den Rat von @Eran Ben-Natan und verwenden Sie den echo
erweiterten Modus von GNU (andere Implementierungen können/werden abweichen – in POSIX ist kein spezifisches Verhalten angegeben (IEEE 1003.1 2008, Seite 2615, Zeile 84306)).