Ответы:
используйте scriptкоманду. Он скопирует все, что идет на экран в файл
script -c "sudo apt-get install things" script-file.script
scriptотправляет вывод команды в файл, но не показывает его на экране.
script -c "history" ~/hist.txtи увидел вывод, указывающий Script startedи Script done, но я не увидел вывод действительной команды на экране.
history- это встроенная оболочка, а не внешняя команда. Происходит следующее: 1) скрипт запускается, 2) скрипт ищет команду истории, не находит ее, поэтому он предполагает, что он должен запустить ее через оболочку. 3) скрипт запускает команду history через оболочку 4) новая оболочка запускается и выполняет внутреннюю команду history. Поскольку это новая неинтерактивная оболочка, истории нечего сказать.
scriptтакже может быть запущен в интерактивном режиме. Просто введите scriptв командной строке. Вы получите новую оболочку, и любые введенные вами команды сохранят свои результаты. Введите, exitчтобы закрыть оболочку и сохранить файл. По умолчанию вызывается вывод, typescriptи он будет содержать все, что отображается на вашем экране, независимо от того, набрали ли вы его, или это был вывод команды. Команда historyвсе еще должна быть доступна в новой оболочке.
Вы можете использовать teeкоманду для достижения этой цели.
sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt
Посмотрите здесь для получения дополнительной информации или выполнитьman tee
Примечание. Как уже упоминалось, 2>&1необходимо перенаправить STDERR в STDOUT, чтобы перехватить любые ошибки. Посмотрите этот вопрос StackOverflow для хорошего объяснения того, что на 2>&1самом деле делает.
scriptчто команду не нужно заключать в кавычки. Поэтому такие преимущества, как завершение bash, легче реализовать.
-c "something ...": if, после чего вы попадете в оболочку, и закончите, когда вы выйдете из этой оболочки. Позволяет использовать несколько команд и т. Д. Кроме того, в нем содержится больше информации о «форматировании», что позволяет воспроизводить некоторые другие вещи (например, очистить экран и т. Д.) (Но это также может испортить вывод ... ymmv)
|&вместо 2>&1 |Bash
tee будет делать работу по мере необходимости.
Чтобы записать вывод в файл, используйте:
sudo apt-get install your_software | tee log_file.txt
Это будет захватывать только выходные данные, но не сообщения об ошибках. Если вы также хотите записать сообщения об ошибках, измените команду на:
sudo apt-get install your_software 2>&1 | tee log_file.txt
bash поддерживает |&оператор , sudo apt-get install your_software |& tee log_file.txtволи трубы как стандартный вывод и стандартный поток ошибок в tee. (Престижность Дж. Ф. Себастьяну, который предложил это в другом месте .)
Одна из прелестей apt-get (и APT в целом) заключается в том, что они хранят файлы журналов практически для всего, даже для вывода на терминал любой команды, которую вы запускаете через /var/log/apt. Например, это последняя запись в моем /var/log/apt/term.log:
Log started: 2014-06-20 16:46:08
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Log ended: 2014-06-20 16:46:33
Теперь, сравнивая с фактическим результатом:
➜ ~ sudo apt-get remove xdotool
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libxdo3
Use 'apt-get autoremove' to remove it.
The following packages will be REMOVED:
xdotool
0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded.
After this operation, 135 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Это спасло меня от нескольких строк, которые в большинстве случаев не актуальны, и делает это автоматически. Таким образом, вам не нужна дополнительная команда, чтобы делать то, что вы хотите, apt-get сделает это за вас.
apt-getправильно?