Ответы:
используйте 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
правильно?