Прямой вывод команды в файл, включая исходную команду, и печать в терминале

Вам необходимо установить пакет wmctrl. Затем добавьте это в свой файл ~ / .bashrc:

HORIZONTAL=600
VERTICAL=400
wmctrl -r ":ACTIVE:" -e 0,-1,-1,${HORIZONTAL},${VERTICAL}

Он изменит размер вашего активного окна (должен быть терминалом) на размер, указанный переменными ${HORIZONTAL} и ${VERTICAL}. Обратите внимание, что они измеряются в пикселях. Вы можете настроить геометрию вашего терминала на то, что хотите, а затем использовать пакет screenruler для измерения размеров в пикселях.

Надеюсь, что это поможет:)

EDIT: На самом деле вы можете запускать это, чтобы показать размер всех открытых gnome-terminal:

wmctrl -l -x -G | grep gnome-terminal.Gnome-terminal | awk '{ print "Horizontal: "$5" pixels; Vertical: "$6" pixels" }'
8
задан 28 November 2017 в 13:13

9 ответов

Это tee, который вы ищете.

ls -l | tee outfile

выводит вывод ls -l на stdout (т. е. терминал) и сохраняет его в файле outfile одновременно , Но: он не записывает имя команды ни в stdout, ни в файл. Для этого просто echo имя команды перед запуском команды и выведите оба выхода на tee:

( echo "ls -l" && ls -l ) | tee outfile

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

both(){ ( echo "$1" && $1 ) | tee outfile ;}

После этого вы можете просто запустить

both "ls -l"

, чтобы получить желаемый результат. Поместите функцию в свой ~/.bashrc, чтобы она определялась в каждом новом терминале. Замените outfile на $2, чтобы иметь возможность указать выходной файл, например. both "ls -l" output вместо записи в outfile каждый раз. Если вы не хотите, чтобы выходной файл был перезаписан, а добавили к нему, добавьте параметр -a в tee.

13
ответ дан 22 May 2018 в 15:50
  • 1
    Это прекрасно ответило на мой запрос и делает именно то, что мне нужно - спасибо. – shaneoh 28 November 2017 в 13:58
  • 2
    Если вы используете "$@" вместо "$1" в определении both, вы можете опустить кавычки при вызове (и при необходимости использовать нормальную оболочку). – Paŭlo Ebermann 29 November 2017 в 03:06

Это tee, который вы ищете.

ls -l | tee outfile

выводит вывод ls -l на stdout (т. е. терминал) и сохраняет его в файле outfile одновременно , Но: он не записывает имя команды ни в stdout, ни в файл. Для этого просто echo имя команды перед запуском команды и выведите оба выхода на tee:

( echo "ls -l" && ls -l ) | tee outfile

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

both(){ ( echo "$1" && $1 ) | tee outfile ;}

После этого вы можете просто запустить

both "ls -l"

, чтобы получить желаемый результат. Поместите функцию в свой ~/.bashrc, чтобы она определялась в каждом новом терминале. Замените outfile на $2, чтобы иметь возможность указать выходной файл, например. both "ls -l" output вместо записи в outfile каждый раз. Если вы не хотите, чтобы выходной файл был перезаписан, а добавили к нему, добавьте параметр -a в tee.

13
ответ дан 18 July 2018 в 02:26

Это tee, который вы ищете.

ls -l | tee outfile

выводит вывод ls -l на stdout (т. е. терминал) и сохраняет его в файле outfile одновременно , Но: он не записывает имя команды ни в stdout, ни в файл. Для этого просто echo имя команды перед запуском команды и выведите оба выхода на tee:

( echo "ls -l" && ls -l ) | tee outfile

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

both(){ ( echo "$1" && $1 ) | tee outfile ;}

После этого вы можете просто запустить

both "ls -l"

, чтобы получить желаемый результат. Поместите функцию в свой ~/.bashrc, чтобы она определялась в каждом новом терминале. Замените outfile на $2, чтобы иметь возможность указать выходной файл, например. both "ls -l" output вместо записи в outfile каждый раз. Если вы не хотите, чтобы выходной файл был перезаписан, а добавили к нему, добавьте параметр -a в tee.

13
ответ дан 24 July 2018 в 17:34

Вы можете использовать команду script, которая сделает файл машинописного текста всего, напечатанного на вашем терминале. Он создает разветвленные оболочки и записывает все до тех пор, пока не выйдет эта оболочка.

$ script my_output
Script started on Tue 28 Nov 2017 09:46:15 AM UTC
$ whoami
ajefferiss
$ exit
Script done on Tue 28 Nov 2017 09:46:27 AM UTC

Тогда, если я cat my_output получаю тот же вывод:

$ cat my_output
Script started on Tue 28 Nov 2017 09:46:15 AM UTC
$ whoami
ajefferiss
$ exit
exit

Script done on Tue 28 Nov 2017 09:46:27 AM UTC
8
ответ дан 22 May 2018 в 15:50

Вы можете использовать функцию отладки оболочки вместе с tee:

( set -x; command1 args...; command2 args ) 2>&1 | tee output.log
( ... ) запускает суб-оболочку, которая позволяет вам «собирать» выходные потоки всех выполненных команд внутри суб-оболочки. Он также содержит влияние команды set ниже на эту под-оболочку. set -x включает параметр оболочки x, который печатает все команды, которые оболочка запускает в стандартный поток ошибок, прежде чем запускать их. 2>&1 перенаправляет поток 2 (стандартная ошибка) в поток 1 (стандартный вывод). | перенаправляет стандартный выходной поток левой команды в стандартный поток ввода правой команды. tee FILE копирует стандартный поток ввода в файл FILE и стандартный вывод.

Если ваша последовательность команд уже находится в файле сценария, было бы разумнее запустить ее следующим образом:

bash -x /path/to/script args... 2>&1 | tee output.log
5
ответ дан 22 May 2018 в 15:50

Вы можете использовать команду script, которая сделает файл машинописного текста всего, напечатанного на вашем терминале. Он создает разветвленные оболочки и записывает все до тех пор, пока не выйдет эта оболочка.

$ script my_output Script started on Tue 28 Nov 2017 09:46:15 AM UTC $ whoami ajefferiss $ exit Script done on Tue 28 Nov 2017 09:46:27 AM UTC

Тогда, если я cat my_output получаю тот же вывод:

$ cat my_output Script started on Tue 28 Nov 2017 09:46:15 AM UTC $ whoami ajefferiss $ exit exit Script done on Tue 28 Nov 2017 09:46:27 AM UTC
8
ответ дан 18 July 2018 в 02:26

Вы можете использовать функцию отладки оболочки вместе с tee:

( set -x; command1 args...; command2 args ) 2>&1 | tee output.log ( ... ) запускает суб-оболочку, которая позволяет вам «собирать» выходные потоки всех выполненных команд внутри суб-оболочки. Он также содержит влияние команды set ниже на эту под-оболочку. set -x включает параметр оболочки x, который печатает все команды, которые оболочка запускает в стандартный поток ошибок, прежде чем запускать их. 2>&1 перенаправляет поток 2 (стандартная ошибка) в поток 1 (стандартный вывод). | перенаправляет стандартный выходной поток левой команды в стандартный поток ввода правой команды. tee FILE копирует стандартный поток ввода в файл FILE и стандартный вывод.

Если ваша последовательность команд уже находится в файле сценария, было бы разумнее запустить ее следующим образом:

bash -x /path/to/script args... 2>&1 | tee output.log
5
ответ дан 18 July 2018 в 02:26

Вы можете использовать команду script, которая сделает файл машинописного текста всего, напечатанного на вашем терминале. Он создает разветвленные оболочки и записывает все до тех пор, пока не выйдет эта оболочка.

$ script my_output Script started on Tue 28 Nov 2017 09:46:15 AM UTC $ whoami ajefferiss $ exit Script done on Tue 28 Nov 2017 09:46:27 AM UTC

Тогда, если я cat my_output получаю тот же вывод:

$ cat my_output Script started on Tue 28 Nov 2017 09:46:15 AM UTC $ whoami ajefferiss $ exit exit Script done on Tue 28 Nov 2017 09:46:27 AM UTC
8
ответ дан 24 July 2018 в 17:34

Вы можете использовать функцию отладки оболочки вместе с tee:

( set -x; command1 args...; command2 args ) 2>&1 | tee output.log ( ... ) запускает суб-оболочку, которая позволяет вам «собирать» выходные потоки всех выполненных команд внутри суб-оболочки. Он также содержит влияние команды set ниже на эту под-оболочку. set -x включает параметр оболочки x, который печатает все команды, которые оболочка запускает в стандартный поток ошибок, прежде чем запускать их. 2>&1 перенаправляет поток 2 (стандартная ошибка) в поток 1 (стандартный вывод). | перенаправляет стандартный выходной поток левой команды в стандартный поток ввода правой команды. tee FILE копирует стандартный поток ввода в файл FILE и стандартный вывод.

Если ваша последовательность команд уже находится в файле сценария, было бы разумнее запустить ее следующим образом:

bash -x /path/to/script args... 2>&1 | tee output.log
5
ответ дан 24 July 2018 в 17:34

Другие вопросы по тегам:

Похожие вопросы: