Как сохранить все выходные данные команд и ошибки?

Всем привет!

Мне нужно захватить все команды, stdout и stderr без каких-либо дополнений к командам.
Я имею в виду, что я должен сохранить / сохранить вывод этих:

  1. $ echo 'test'
  2. $ ls -l
  3. $ cat some_file

commands.file

  1. alex @ bender: / pwd $ echo 'test'
  2. alex @ bender: / pwd $ ls
  3. alex @ bender: / pwd $ cat some_file
  4. alex @ bender: / pwd $ fsdfsdfsd

stdout.file

  1. тестовое задание
  2. test.txt some_file
  3. некоторый контент файла

stderr.file

_4. fsdfsdfsd

Что касается первой части вопроса, я нашел скрипт, который использует ловушку и перед оценкой команды сохраняет команду для регистрации. Но как насчет хранения результатов? повторяю: это должно быть решено без каких-либо дополнений к команде. Я имею в виду, что после запуска скрипта мне не нужно писать, например, первую командуls > log.file. Я хочу увидеть ее без "> log.file".

Я пишу некоторый скрипт на Python, он работает как командная оболочка.

если name == 'main':
user = os.getlogin ()
machine_name = os.uname () [1]

stdinbuff = open('commands', 'w')                                             
stdoutbuff = open('outs', 'w')                                                

command_string = 1                                                            
while command_string != '0':                                                  

    a = user + '@' + machine_name + ":" + os.getcwd() + '>';                  
    a = a.replace('/home/', '~/')                                             
    print a,                                                                  
    command_string = raw_input()                                              
    command_args = command_string.split()                                     

    proc = subprocess.Popen(command_args, stdout=subprocess.PIPE)             
    (out, err) = proc.communicate()                                           
    print out                                                                 

    stdinbuff.write(command_string+'\n')                                      
    stdoutbuff.write(out+'\n')                                                

stdinbuff.close()                                                                 
stdoutbuff.close()

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

Может быть, кто-то может сказать мне, что я должен делать?

2 ответа

Решение

Может быть screen инструмент может сделать трюк для вас с функцией регистрации экрана. Просто начни screen в командной строке и с ключами CTRL-a + H (Первая комбинация CTRL + a а затем заглавная H с SHIFT + H, только чтобы уточнить) все будет зарегистрировано в файле screenlog.0, Каталог, в котором находится файл журнала, зависит от того, с какого экрана вы начали, т. Е. Если вы запустили экран в вашем $HOME, тогда файл журнала будет найден там.

Другие вопросы по тегам