Jeden aspekt tego problemu tak naprawdę nie dotyczy awk- i tylko trochę o powłoce. Problem polega na tym, że na standardowym, kanonicznym tty przez większość czasu dyscyplina tty jądra buforuje twoje dane wejściowe - po prostu odbijają je na ekranie i nigdzie indziej - aby mógł skutecznie obsługiwać odstępy wsteczne i tym podobne.
Jednak gdy naciśniesz klawisz Return lub w inny sposób wprowadzisz nowy wiersz, wszystkie buforowane dane zostaną natychmiast przekazane do aplikacji do czytania - zwykle do powłoki. Możesz to zaobserwować, obserwując $PS2po wprowadzeniu wiszącego cytatu. Gdy powłoka drukuje $PS2, dzieje się tak, ponieważ po prostu odczytuje jakiś blok danych wejściowych i nie jest jeszcze przekonana, czy to koniec.
Tak więc, dla wygody, potrzebujesz jakiegoś sposobu wysłania \newline do bufora terminala bez konieczności natychmiastowego wypychania wszystkich innych danych wejściowych. Standardowym sposobem na to jest sekwencja klawiszy CTRL+V- która podaje terminalowi twój następny znak wejściowy. Zrób CTRL+Vto CTRL+J- ponieważ to drugie jest zwykle jak \nnapisać dosłowną ewline. Będziesz wiedział, że zadziałało, gdy nie widzisz, $PS2ponieważ powłoka nadal nie odczytała danych wejściowych.
Zauważ jednak, że jeśli nie przeczytałem, że wejście wcześniejszej CTRL+Vbędzie dokonały żadnego znaczenia dla powłoki w ogóle - że tylko cytuje go w składzie dyscypliny. Na pewno będziesz chciał zacytować nowy wiersz, a także zrobić z nim coś sensownego.
Nawiasem mówiąc, CTRL+Vmoże być użytecznie zastosowany na inne sposoby - na przykład "$(printf \\33)"nie jest to jedyny sposób na zapisanie ESCznaku w skrypcie powłoki - i nie jest nawet najprostszy. Możesz dosłownie wprowadzić dowolny znak, który wyśle klawiatura, bez próby jego interpretacji przez sterownik wejściowy, jeśli po prostu w ten sposób uciec.
Często lubię używać <tab> w wierszu poleceń bez powłoki, która próbuje cokolwiek ukończyć. Ponieważ powłoki, które wykonują uzupełnianie, zwykle konfigurują <tab> w sposób synonimiczny stty eol \t, aby ich systemy uzupełniające działały, CTRL+Vdziała dla mnie nawet w nieznanym środowisku.