Quando eseguo il seguente comando in Terminal.app:
echo -e "a\tb\tc\td\te\tf\tg\tyo"
Dovrei ottenere il seguente risultato (usando una finestra a 40 colonne in modo che le righe non si sovrappongano qui e sostituendo le schede con spazi in modo che qui venga mostrata la corretta quantità di spazio):
a b c d e
f g yo
Invece, ottengo questo risultato:
a b c d e y
o
Come puoi vedere, mancano f
e g
.
Dopo aver provato varie stringhe, penso che il problema è che una scheda alla fine di una riga non fa avanzare l'output alla riga successiva, ma lascia il cursore di output di un carattere prima della fine della riga. Ad esempio (assumendo ancora un terminale a 40 colonne), 4 schede posiziona il cursore sulla posizione 32 della riga 1. Un'altra scheda dovrebbe posizionare il cursore sulla posizione 0 della linea 2, ma il cursore si trova nella posizione 39 della linea 1, lasciando spazio per un altro carattere da stampare, e anche a quel punto, il cursore non è avanzato alla riga successiva, quindi un'altra scheda ci riporterà in posizione 39. Quindi, un numero illimitato di stringhe (single-character + tab) sarà silenziosamente ignorato.
Ho sperimentato una varietà di:
- shell (compresi
bash
,sh
ecsh
) - larghezze del terminale (incluse 40 colonne, 80 e molte altre)
- tipi di terminale (compresi
vt100
exterm-color
) - codifiche dei caratteri del terminale (compresi
UTF-8
eascii
) - impostazioni del terminale (incluso
Escape non-ASCII input
)
Inoltre, un amico ha eseguito comandi simili su un sistema Linux con un terminale diverso e non ha riscontrato lo stesso bug.
Qualcuno sa come risolvere questo problema? Sarei molto grato, dato che questo bug sta rendendo difficile il debug di alcuni script di shell fatti in casa su file separati da tabulazioni.