Was ich bekomme:
host:~ user$ cat example.txt
some texthost:~ stas$
Was ich bekommen möchte:
host:~ user$ cat example.txt
some text
host:~ stas$
Gibt es eine Möglichkeit, mich so zu cat
verhalten?
Ich verwende Bash unter Mac OS X.
Die meisten Unix-Tools eignen sich gut für Textdateien. Eine Textdatei besteht aus einer Folge von Zeilen. Eine Zeile besteht aus einer Folge druckbarer Zeichen, die mit einem Zeilenumbruch enden. Insbesondere ist das letzte Zeichen einer nicht leeren Textdatei immer ein Zeilenvorschub. Offensichtlich example.txt
enthält es nur some text
keinen abschließenden Zeilenumbruch, es handelt sich also nicht um eine Textdatei.
cat
macht einen einfachen Job; Beliebige Dateien in Textdateien zu verwandeln, gehört nicht zu diesem Job. Einige andere Tools wandeln ihre Eingabe immer in Textdateien um. Wenn Sie nicht sicher sind, ob die angezeigte Datei mit einem Zeilenumbruch endet, versuchen Sie, awk 1
anstelle von auszuführen cat
.
Sie können die Eingabeaufforderung der Bash in der nächsten Zeile anzeigen lassen, wenn der vorherige Befehl den Cursor an einer anderen Stelle als dem letzten Rand positioniert hat. Fügen Sie dies in Ihre .bashrc
( GetFree- Variante eines Vorschlags von Dennis Williamson ) ein:
shopt -s promptvars
PS1='$(printf "%$((COLUMNS-1))s\r")'$PS1
cat
, deshalb behalte ich dies als letzten Ausweg für die Zeit, in der dieses Problem mich wieder zu quälen beginnt.PROMPT_COMMAND
einlesen und, wenn sie nicht 0 ist, ein newline (\n
) als erstes Zeichen von verwenden musstePS1
.Ich bevorzuge die folgende Methode ...
Hierdurch wird der Inhalt von
example.txt
Zeilenumbrüchen nicht bewertet oder gelegentlich hinzugefügt. Sobald die Katze fertig ist, wird nur ein Zeilenumbruch angezeigt. Es ist leicht zu merken, und niemand denkt darüber nach, ob er starke oder schwache Zitate richtig verwendet.Der einzige Nachteil ist, dass Sie einen zusätzlichen Zeilenumbruch erhalten, wenn die Datei einen eigenen abschließenden Zeilenumbruch enthält.
quelle
Ich begann mit der Verwendung von @ Gilles 'Antwort, stellte jedoch fest, dass sich die Eingabeaufforderung nicht mehr wie erwartet am Zeilenanfang befand, wenn das Terminal die Anzahl der Spalten änderte. Dies kann aus verschiedenen Gründen geschehen, z. B. durch Aufteilen von Tmux / Bildschirm, manuelles Ändern der Größe eines GUI-Containers, Schriftartenänderungen usw.
Was ich wirklich wollte, war etwas, das eine neue Zeile hinzufügt, wenn das Terminal seine Eingabeaufforderung an einer anderen Stelle als in der ersten Spalte ausgibt. Um dies zu tun mir , um herauszufinden , wie erforderlich die aktuelle Spalte zu bekommen, die ich verwenden , diese Antwort zu bekommen. Die endgültige Konfiguration der Arbeitsaufforderung ist unten:
quelle
__get_terminal_column
?PS1="\n"
ich mussecho
und muss nur nicht modifizierenPS1
.Das Problem könnte sein, dass Ihre example.txt am Ende Ihrer Datei keine neue Zeile enthält.
quelle
cat
der Job ist, also suche ich wahrscheinlich nach einem Workaround.example.txt
keine neue Zeile am Ende der Datei enthält. Dies ist der springende Punkt der Frage.Wenn Sie darauf bestehen
cat
, funktioniert dies für beide Dateitypen, mit und ohne Zeilenumbruch am Ende:Sie können es in eine Funktion mit einem Namen Ihrer Wahl (gerade
cat
) umwandeln in.bashrc
:quelle
Sie können auch .bashrc hinzufügen
funktioniert bei mir.
quelle