Відповіді:
використовувати 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) нова оболонка запускається та виконує внутрішню команду історії. Оскільки це нова неінтерактивна оболонка, історії нічого не сказати.
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оскільки команду не потрібно цитувати. Тож такі переваги, як баш-завершення, легше досягти.
-c "something ...": if тоді переведе вас у оболонку, і закінчить, коли ви вийдете з цієї оболонки. Дозволяє декілька команд тощо. Крім того, він зберігає більше "форматування" інформації, дозволяючи відтворювати ще деякі речі (наприклад, очищення екрана тощо) (але це також може зіпсувати вихід ... ymmv)
|&замість 2>&1 |in 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правильно?