Подождите, пока поток stdout завершится, а затем добавьте его содержимое в файл

Я пытаюсь запустить команду в bash, где у меня есть command 1 которая принимает большое количество контента через stdin, а затем выводит этот контент в file.txt , однако command 1 генерирует поток контента и, видимо, file.txt создается как только command 1 запускается, а затем обновляется, как только command 1 заканчивается правильным выходом.

 echo 'a lot of content' | command 1 > file.txt 

Проблема в том, что я только хочу создать или коснуться file.txt только command 1 будет полностью закончена.

Есть ли способ достичь этого?

Редактировать:

Пример использования. Я использую сервер веб-разработки, который обновляется каждый раз, когда файл изменяется, поэтому я делаю предварительную обработку перед фактическим обновлением файла.

Проблема с приведенной выше командой заключается в том, что если файл обновляется или создается с пустым содержимым, сервер мгновенно обновляется, имея пустую страницу, поэтому я действительно хотел дождаться завершения обработки сообщения (скажем, это займет около 4 секунд) и только затем коснитесь file.txt чтобы он был правильно отображен на странице.

Таким образом, мне нужна только одна команда, которая является command 1 а затем, после обновления file.txt , мой сервер веб-разработки автоматически обновится.

2 Solutions collect form web for “Подождите, пока поток stdout завершится, а затем добавьте его содержимое в файл”

Простейшим решением является, вероятно, sponge как предложил @heemayl . Кроме того, вы можете сделать что-то вроде этого:

 command > tmpfile && mv tmpfile watched_file 

Это приведет к тому, что command сохранит свой вывод в tmpfile , который будет только переименован в watched_file (файл, на который настроен ваш сервер для просмотра) после выхода команды и только в том случае, если она успешно завершилась. Чтобы также переименовать его при сбое, используйте:

 command > tmpfile; mv tmpfile watched_file 

Используйте sponge из GNU moreutils :

 echo 'a lot of content' | command 1 | sponge file.txt 

Или используйте временный файл.

  • Как выводить строки, разделенные запятыми, используя расширение brah brace
  • Поиск файлов с определенным размером внутри рекурсивных архивов на молнии
  • Переключение оболочек на одно задание cron
  • Как команда diff обрабатывает кеширование?
  • Может перенаправлять stdout и stderr в те же строки, что и строки?
  • Хотя цикл не проверяет условие в оболочке
  • Как понять порядок между расширениями?
  • Объяснение sed в сценарии оболочки
  • Есть расширение оболочки, которое похоже на scm_breeze, где вывод нумеруется, и вы можете псевдонизировать файл по его номеру
  • Как отключить трассировки bash?
  • Результат подсчета в выражении find / exec
  • Linux и Unix - лучшая ОС в мире.