2

Я хочу, чтобы фактическая командная строка была зарегистрирована вместе с ее выводом.

Я обычно выполняю важные команды, подобные этой:

PERL5LIB=${PERL5LIB}:/something/extra my-command.pl many arguments which I want to save 2>&1 | tee -a my-command.log

Теперь my-command.log содержит как stdout и stderr из my-command.pl . Тем не менее, он не содержит фактической командной строки выше.

Я знаю о файле истории bash ; так что, я думаю, я мог бы скопировать оттуда (или из терминала) вручную, но это, конечно, не очень хорошее решение.

Я думаю, я мог бы написать функцию оболочки, которая будет принимать командную строку, выводить ее и затем выполнять, но тогда мне придется иметь дело с адом цитирования.

Я попытался set -v но это, кажется, игнорирует перенаправление.

script сохраняет командную строку (но только если я запускаю новую оболочку, а не с -c), но он не работает в буфере взаимодействия с оболочкой emacs и также сохраняет приглашение оболочки - включая escape-последовательности! - к его лог-файлу, поэтому он неоптимален.

1 ответ1

3

Попробуйте опцию -x для bash:

bash -x "PERL5LIB=${PERL5LIB}:/something/extra my-command.pl many arguments which I want to save" 2>&1 | tee -a my-command.log

Мой тест:

$ bash -x -c "echo a bunch of difffernt arguments"
+ echo a bunch of difffernt arguments
a bunch of difffernt arguments

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .