При запуске некоторых тестов мне нужно выполнить ряд команд. Это было бы чрезвычайно полезно для меня и сэкономило бы много времени, если бы был способ сделать все эти вещи:
- Запустите команду мне нужно запустить
- Перенаправить весь вывод команды в указанный файл
- Включить оригинальную команду в указанный файл
- Вывести вывод из исходной команды в терминал
Люди предложили использовать tee для меня, который отлично печатает на терминале и отправляет в файл, но не включает оригинальную команду. В итоге я хотел бы получить файл, в котором первая строка - это команда, которую я выполнил, а затем под ней выводится команда.
Кто-то предложил это:
echo "ls -l" | xargs -I{} bash -c "echo >> output.file; eval {} >> output.file"
Но это не печатает вывод в терминале и не включает оригинальную команду в файл.
Буду признателен за любые идеи.
command-line
shaneoh
источник
источник
tee
.Ответы:
Это
tee
ты ищешь.выводит вывод
ls -l
в stdout (то есть в терминал) и одновременно сохраняет его в файлoutfile
. Но : он не записывает имя команды ни в стандартный вывод, ни в файл. Для этого простоecho
введите имя команды перед запуском команды и направьте оба выводаtee
:Это громоздко для типа, так почему бы не определить функцию?
После этого вы можете просто запустить
чтобы получить желаемый результат. Поместите функцию в свой,
~/.bashrc
чтобы она была определена в каждом новом терминале.Если вы хотите иметь возможность указать выходной файл в качестве первого аргумента, как в
вместо этого сделайте это:
Если вы не хотите, чтобы выходной файл был перезаписан, а скорее добавляете его, добавьте
-a
параметр вtee
.источник
Вы можете использовать
script
команду, которая создаст файл машинописи всего, что напечатано на вашем терминале. Он создает раздвоенные оболочки и будет записывать все, пока эта оболочка не будет закрыта.Тогда, если я
cat my_output
получу такой же вывод:источник
Вы можете использовать функцию отладки оболочки вместе с
tee
:( ... )
запускает под-оболочку, которая позволяет вам «собирать» выходные потоки всех команд, выполняемых внутри под-оболочки. Он также содержит эффектset
команды ниже для этой вложенной оболочки.set -x
включает параметрx
оболочки, который печатает все команды, которые оболочка выполняет в стандартном потоке ошибок, перед их выполнением.2>&1
перенаправляет поток 2 (стандартная ошибка) в поток 1 (стандартный вывод).|
перенаправляет стандартный поток вывода левой команды на стандартный поток ввода правой команды.tee FILE
копирует стандартный поток ввода в файлFILE
и в стандартный вывод.Если ваша последовательность команд уже находится в файле сценария, было бы более целесообразно выполнить ее следующим образом:
источник