Почему делает это, “в то время как считано” работает в терминале, но не в сценарии оболочки?

Если я понял Ваш вопрос правильно, попробуйте это:

C (это - капитал C) удалит все из курсора в конец строки и поместит Вас в РЕЖИМ ВСТАВКИ, затем Вы пишете свою замену, оставляете РЕЖИМ ВСТАВКИ, используете. повторить процесс где-то в другом месте.

8
12.11.2012, 20:36
2 ответа

Вы, кажется, выполняете первый пример в bash, и второе в том, чем указывают /bin/sh, который является оболочкой POSIX, требующей, чтобы аргумент был передан, указав переменную, Вы хотите поместить вход в. Изменение хижины к #!/bin/bash должен зафиксировать это.

10
27.01.2020, 20:10
  • 1
    Хорошее наблюдение @Chris! Это работает. Думайте, что я буду читать немного на различии между sh и bash. –  invert 12.11.2012, 20:32
  • 2
    Аварийный действительно! Я мог повторно связаться /bin/sh чтобы колотить, но думать, я просто использовал бы удар непосредственно с этого времени, для предотвращения неоднозначности. Спасибо :) –  invert 12.11.2012, 20:46
  • 3
    Часто интерактивные оболочки отличаются от сценариев оболочки в буферизации их вывода. Чтение из межпроцессных каналов может привести ко всем видам странных поведений синхронизации если команда, генерирующая буферы вывода ее записи, когда выполнено нев интерактивном режиме. –  JesseM 26.05.2017, 01:51

В sh синтаксисе Вам нужно

IFS= read -r REPLY

Некоторые оболочки как ksh, удар и zsh позволяют read быть названным без имени переменной, но поведения отличается между ними. Посмотрите, например, вывод

printf 'te\ st\\\na ' | "$shell" -c 'read; printf "%s\n" "<$REPLY>"'

расходясь во всем ударе, zsh, pdksh и ksh93

5
27.01.2020, 20:10
  • 1
    Это имеет смысл, почему оболочка, которую я использовал, не знала имя переменной, @Stephane спасибо. –  invert 12.11.2012, 21:33

Теги

Похожие вопросы