Один з аспектів цієї проблеми насправді не стосується awk
- і лише трохи про оболонку. Проблема полягає в тому, що на стандартній, канонічній tty більшу частину часу чітка дисципліна ядра буферизує ваш вклад - просто повторюючи його на ваш екран і ніде більше - щоб воно могло ефективно обробляти зворотні розміри та подібні.
Однак, коли ви натискаєте return або іншим чином вводите новий рядок, усі ці буферизовані дані одразу надсилаються до програми для читання - як правило, до вашої оболонки. Ви можете це спостерігати, спостерігаючи за $PS2
введенням звисаючої цитати. Коли оболонка роздруковується, $PS2
це тому, що вона просто читає якийсь блок вашого вводу і ще не впевнена, що ви пройшли.
Отже, для зручності вам потрібен певний спосіб надсилання \n
ewline в термінальний буфер без необхідності натискати весь цей інший вхід негайно. Стандартний спосіб це - w / послідовність ключаCTRL+V
- яка цитує для терміналу наступний символ введення. Зробіть CTRL+V
тоді CTRL+J
- тому що останній зазвичай полягає в тому, як набрати буквальну \n
лінію ewline. Ви знаєте, що це працює, коли ви не бачите, $PS2
оскільки оболонка досі не прочитала ваші дані.
Зверніть увагу , однак , що , коли він дійсно читав , що ваш вхід раніше CTRL+V
не буде ніякої різниці для оболонки взагалі - що тільки цитує його лінію дисципліни. Ви обов'язково захочете цитувати новий рядок, а також зробити щось значиме з ним.
До речі, це CTRL+V
може бути корисно застосовано і іншими способами - наприклад, "$(printf \\33)"
це не єдиний спосіб записати ESC
персонажа в сценарій оболонки - і це навіть не найпростіше. Ви можете буквально ввести будь-який символ, який буде надіслана клавіатурою, без того, щоб драйвер введення намагався інтерпретувати його, якщо ви вперше уникнете його таким чином.
Мені часто подобається використовувати <tab> s в командному рядку без оболонки, намагаючись нічого завершити. Оскільки оболонки, які завершують завершення, зазвичай налаштовують <tab> так stty eol \t
, щоб вони працювали в системах завершення,CTRL+V
навіть у незнайомих середовищах .