Co dostaję:
host:~ user$ cat example.txt
some texthost:~ stas$
Co chcę uzyskać:
host:~ user$ cat example.txt
some text
host:~ stas$
Czy mogę w ten sposób cat
zachowywać się w ten sposób?
Używam bash na Mac OS X.
Większość narzędzi uniksowych jest zaprojektowana do pracy z plikami tekstowymi. Plik tekstowy składa się z sekwencji wierszy. Linia składa się z sekwencji drukowalnych znaków kończących się znakiem nowej linii. W szczególności ostatnim znakiem niepustego pliku tekstowego jest zawsze znak nowej linii. Oczywiście example.txt
zawiera tylko some text
bez ostatniej nowej linii, więc nie jest to plik tekstowy.
cat
wykonuje prostą pracę; przekształcanie dowolnych plików w pliki tekstowe nie jest częścią tego zadania. Niektóre inne narzędzia zawsze przekształcają dane wejściowe w pliki tekstowe; jeśli nie masz pewności, czy wyświetlany plik kończy się nową linią, spróbuj uruchomić awk 1
zamiast cat
.
Możesz sprawić, by bash wyświetlił monit w następnym wierszu, jeśli poprzednie polecenie opuściło kursor w miejscu innym niż ostatni margines. Umieść to w swoim .bashrc
(wariant GetFree propozycji Dennisa Williamsona ):
shopt -s promptvars
PS1='$(printf "%$((COLUMNS-1))s\r")'$PS1
cat
, więc zachowam to jako ostateczność na czas, gdy ten problem zacznie mnie ponownie niepokoić.PROMPT_COMMAND
i, jeśli nie jest to 0, użyj\n
znaku nowej linii ( ) jako pierwszego znakuPS1
.Wolę następującą metodę ...
To nie ocenia zawartości
example.txt
ani nie dodaje nowego wiersza. To tylko echo nowego wiersza po skończeniu kota, jest łatwe do zapamiętania i nikt nie zastanawia się, czy poprawnie używa silnych, czy słabych cytatów.Jedynym minusem jest to, że dostaniesz dodatkową linię nowej linii, jeśli plik ma własną linię końcową.
źródło
Zacząłem używać odpowiedzi @ Gilles, ale stwierdziłem, że jeśli terminal zmieni liczbę kolumn, monit nie będzie już na początku wiersza, jak oczekiwano. Może się to zdarzyć z różnych powodów, w tym podziałów tmux / screen, ręcznego zmieniania rozmiaru kontenera GUI, zmian czcionek itp.
To, czego naprawdę chciałem, to coś, co dodałoby nowy wiersz, gdyby terminal zaczął drukować swój monit w innym miejscu niż pierwsza kolumna. Aby to zrobić, musiałem dowiedzieć się, jak uzyskać bieżącą kolumnę, której użyłem tej odpowiedzi . Ostateczna konfiguracja monitów roboczych jest poniżej:
źródło
__get_terminal_column
?PS1="\n"
prostu mamecho
i nie muszę modyfikowaćPS1
.Problemem może być to, że plik example.txt nie ma nowego wiersza na końcu pliku.
źródło
cat
jest praca, więc prawdopodobnie szukam jakiegoś obejścia.example.txt
brak nowej linii na końcu pliku jest sednem pytania.Jeśli nalegasz na użycie
cat
, działa to w przypadku obu typów plików, z lub bez znaku nowej linii na końcu:Możesz zmienić go w funkcję o dowolnej nazwie (nawet
cat
) w.bashrc
:źródło
możesz również dodać do .bashrc
pracuje dla mnie.
źródło