#linux #unix
#linux #unix
Вопрос:
При многократном просмотре файлов журнала я задаюсь вопросом, какие параметры / параметры я использовал при выполнении данной команды, которая сгенерировала этот файл журнала.
Есть ли какой-нибудь простой способ вывести командную строку, которая выполняется сама по себе, в стандартный вывод, который будет перенаправлен в файл журнала в верхней части файла?
Комментарии:
1.
echo this_is_my_command >>logfile
?2. Помимо уже упомянутого
set -x
, вы можете создать оболочку, подобнуюverbose(){ printf '>>'; printf ' %s' "$@"; echo; "$@"; }
thenverbose cmd arg | tee logfile
(в отличиеset -x
от этого, команды будут выводиться в стандартный вывод, а не в стандартный вывод).
Ответ №1:
Вы можете повторить команду, передать ее в файл, передать его, а затем добавить вывод в файл с помощью sh
tee -a myfile
:
echo "ls -la" | tee myfile | sh | tee -a myfile
В стандартном выводе вы видите только вывод команды, но в myfile
первой строке есть ls -la
, а следующие строки содержат вывод команды.
Комментарии:
1. Вау — несколько хитрых маневров — удивлен, что у зрелых платформ, таких как unix / linux, нет более простого способа добиться этого.
Ответ №2:
В скрипте, который записывает в файл журнала, используйте set -x
, который печатает в STDERR выполняемые команды. Используйте set x
для возврата к поведению по умолчанию (без печати команд).
Пример:
Скрипт test.sh
:
#!/usr/bin/env bash
echo "INFO: test log message 1"
set -x
echo "INFO: test log message 2"
set x
echo "INFO: test log message 3"
Запустите скрипт:
./test.sh 1>test.log 2>amp;1
Вывод в test.log
:
INFO: test log message 1
echo 'INFO: test log message 2'
INFO: test log message 2
set x
INFO: test log message 3
СМОТРИТЕ ТАКЖЕ:
Отладка сценариев Bash