1

У меня есть сценарий оболочки, который принимает входные данные из другого сценария оболочки. Поток направляется на стандартный ввод.

Мне нужно захватить все байты потока stdin в одну переменную в сценарии оболочки. Затем выполните некоторые операции с ним и отправьте обратно через стандартный вывод.

У меня проблема в том, что иногда во входном файле есть завершающий символ новой строки, но иногда его нет. Если нет, то я не хочу добавлять один. Однако, если есть завершающий символ новой строки, я хочу сохранить это.

Проблема в том, что независимо от того, что я пытаюсь сделать, система либо всегда выводит БЕЗ завершающего символа новой строки (как в случае printf), либо всегда выводит WITH символа новой строки (как в случае с echo).

Скажите, пожалуйста, как называется процесс (не echo или printf), который просто берет переменную и выводит ее, дословно, байт за байтом, поверх stdout. Я перепробовал все возможные варианты для printf и ни один из них не работает для сохранения завершающих строк.

Благодарю.

2 ответа2

0

Окончательное решение, которое я использовал в своем коде, выглядит следующим образом:

function filter() {
    #do lots of sed operations
    #see https://github.com/gistya/expandr for full code
}

GIT_INPUT=`cat; echo x`
FILTERED_OUTPUT=$(printf '%s' "$GIT_INPUT" | filter)
FILTERED_OUTPUT=${FILTERED_OUTPUT%x}
printf '%s' "$FILTERED_OUTPUT"
0

echo -e "$ var" выведет завершающие символы новой строки. Возможно, вы забыли цитаты? Всегда показывайте, что вы пробовали, задавая такие вопросы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .