Показать выполненную команду вместе с выводом в файле журнала

Показать выполненную команду вместе с выводом в файле журнала

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

Например:

whoami > who.dmp

выведет файл, содержащий что-то вроде:

my_username

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

Бывший:

log.txt
###############

echo whoami  <- I want this to show in the file as well
my_username

time   <- I want this to show in the file as well

real    0m0.00s
user    0m0.00s
sys     0m0.00s

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

решение1

Использование встроенной оболочки, set -xвероятно, является самым дешевым и грязным способом сделать это. В скриптах оболочки вы часто увидите строку типа:

#set -x

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

решение2

Вы можете рассмотреть scriptинструмент, который будет сохранять всю терминальную сессию до тех пор, пока вы не выйдете из вызываемой вами программы (которая по умолчанию будет оболочкой). Пример использования:

~/:$ скрипт test.output
Скрипт запущен, выходной файл — test.output
~/:$ пример mkdir
~/:$ пример cd
~/example/:$ touch новый\ файл.txt
~/пример:/$ ls
новый файл.txt
~/пример:/$ выход

Содержимое файла test.outputтогда будет следующим:

Скрипт начат в Пн Июн 25 16:24:28 2012
~/:$ пример mkdir
~/:$ пример cd
~/example/:$ touch новый\ файл.txt
~/пример/:$ ls
новый файл.txt
~/пример/:$ выход

Сценарий выполнен в понедельник 25 июня 16:24:41 2012 г.

Имейте в виду, что этот файл являетсяполныйтранскрипт терминала, поэтому любые возвраты на одну позицию будут отображаться как ^Hили ^?(или как там обозначен возврат на одну позицию вашего терминала).

Связанный контент