Есть ли быстрый и несложный способ регистрировать не только вывод файла оболочки, но и используемые внутри него команды?
Например:
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
или ^?
(или как там обозначен возврат на одну позицию вашего терминала).