Перенаправить вывод всех команд в файл, а не только последний

Я хочу добавить заголовок в файл с эхом, а затем использовать команду для создания остальной части файла. Это означает, что я буду использовать две отдельные команды.

Как написать вывод из обеих команд в файл с перенаправлением?

я пробовал

echo "header line" | cut -c 1-5 input_file > output_file echo "header line"; cut -c 1-5 input_file > output_file 

Это только перенаправляет вывод из команды cut.

Следующая команда работает, но чувствует себя неуклюжей:

 echo "header line" > output_file; cut -c 1-5 input_file >> output_file 

Каков умный способ решения моей проблемы?

  • Подключение через telnet и выполнение определенных операций
  • Игнорируйте эту переменную строку так, чтобы она не выводила
  • Перенаправление Linux: << operator
  • Используйте файл HERE и перенаправляйте вывод команды
  • Как не создать файл nohup.out, но сохранить вывод терминала?
  • Непонятно о поведении моего скрипта при записи в файл журнала
  • Должен ли я использовать трубопровод или перенаправление для ввода в «сортировку»,
  • Как я могу передавать данные по сети или последовательно на дисплей другой Linux-машины?
  • 3 Solutions collect form web for “Перенаправить вывод всех команд в файл, а не только последний”

    Проблема здесь не проблема с перенаправлением Linux; скорее, это фундаментальное непонимание того, как работает трубопровод. Перенаправление здесь не работает, потому что только вырезание на самом деле печатает на stdout. Команда stdout для команды echo передается по каналу на stdin cut (который не используется в этом случае, так как указан файл).

     echo "header line" > output_file && cut -c 1-5 input_file >> output_file 

    это то, что вы хотите, и не совсем неэлегантное (я заменил ваш ; с && так что команда cut будет выполняться только, если заголовок успешно записан, таким образом он не будет выполняться, если у вас нет прав на создание или запись to output_file).

    Вы также можете сделать все это в подоболочке, например.

     (echo "header line"; cut -c 1-5 input_file) > output_file 

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

    Если вы хотите, чтобы вырезать, чтобы пройти stdin до stdout, вы можете попробовать:

     echo "header line" | cut -c 1-5 - input_file 

    (Тире – общий ярлык для stdin)

    Тем не менее, это также будет выполнять операцию разреза на stdin (в результате получается строка заголовка «header»). Трудно сказать, это то, чего вы хотите или нет.

    Что вы ищете:

     { echo "header line"; cut -c 1-5 input_file; } > output_file 
    • Этот синтаксис не имеет побочных эффектов, поскольку команды выполняются в текущей оболочке, а не в подоболочке
    • Существует четкое разграничение команд, которые идут в файл output_file
    • Он хорошо масштабируется, так как вы можете переписать его таким образом:

     { echo "header line" cut -c 1-5 input_file ... # insert new commands here } > output_file 

    Если вы хотите, чтобы выход ошибки поступал в тот же файл, вы можете изменить последнюю строку следующим образом:

     } > output_file 2>&1 

    Спасибо Olivier Dulac за то, что он напомнил этот совет.

    Если вы хотите, чтобы какой-то вывод внутри блока отображался на вашем экране, вы можете использовать этот синтаксис:

     { echo "header line" echo "this line doesn't go to output_file" > /dev/tty cut -c 1-5 input_file } > output_file 

    Чтобы завершить ответы, есть exec.

     exec > output_file echo "header line" cut -c 1-5 input_file 
    Interesting Posts

    Получение ошибки со сном и аргументом в sh-скрипте

    Почему моя функция не работает с пробелами? (cd, dirname)

    Как удалить этот каталог?

    Эффективный способ запуска нескольких сценариев оболочки из одного сценария оболочки

    Можно ли показать вывод rsync на одной строке?

    Лучший способ следить за журналом и выполнять команду, когда в журнале появляется текст

    Cygwin + / usr / bin / xterm: ошибка Xt: невозможно открыть отображение:: 0

    Чтение файлов, принадлежащих другому пользователю, как не root

    Как найти беглого Кронтаба

    Не удается установить PostgreSQL 9.2 на Linux Mint

    Скрыть события активности при запуске

    Резервное копирование VPS через SSH / SFTP

    Устанавливает ли несвободное программное обеспечение из несвободных репозиториев Debian пиратство?

    Не удалось войти в учетную запись любого пользователя в новой установке Arch Linux

    Легко Разделить папку с компьютером под управлением Windows в Fedora 15 (Gnome 3)?

    Linux и Unix - лучшая ОС в мире.