Как я могу сделать так, чтобы Bash автоматически направлял вывод каждой команды в нечто вроде tee? - PullRequest
2 голосов
/ 14 октября 2010

Я использую магию в $PROMPT_COMMAND для автоматического сохранения каждой команды, которую я запускаю, в базу данных:

PROMPT_COMMAND='save_command "$(history 1)"'

, где save_command - более сложная функция.Было бы неплохо также сохранить head / tail вывода каждой команды, но я не могу придумать разумного способа сделать это, кроме ручного добавления какой-либо функции оболочки ко всему, что я печатаю (и это становится еще более болезненным со сложными конвейерами или логическими выражениями).По сути, я просто хочу, чтобы первые и последние 10 строк того, что пошло на /dev/tty, были сохранены в переменной (или даже в файле) - есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 14 октября 2010
bash | tee /dev/tty ./bashout

При этом все stdout сохраняются в bashout.

bash | tee /dev/tty | tail > ./bashout

Хвост stdout каждой команды записывается в bashout.

bash | tee /dev/tty | sed -e :a -e '10p;$q;N;11,$D;ba' > ./bashout

Первые и последние 10 строк стандартного вывода каждой команды записываются в bashout.

Они не сохраняют команду, но если вы измените команду save_command для печати команды в стандартный вывод, она попадет туда.

2 голосов
/ 14 октября 2010

script (1), вероятно, поможет вам начать. Это не позволит вам просто записать первые и последние 10 строк, но вы можете выполнить некоторую постобработку на выходе.

...