Часто я хочу опубликовать что-то на GitHub, например
$ ping google.com
PING google.com (216.58.195.238): 56 data bytes
Request timeout for icmp_seq 0
64 bytes from 216.58.195.238: icmp_seq=0 ttl=53 time=1064.747 ms
Сейчас я запускаю команду, использую screen
s, C-a C-[
чтобы выделить область, enter
скопировать ее в этот буфер, вставить в нее vim
, записать в файл и затем cat
в pbcopy
. Там должен быть лучший способ.
Есть ли команда, которую я могу запустить, которая будет tee
набираться с префиксом команды $
и всем выводом pbcopy
? Или что-нибудь близкое? Я представляю
$ demo ping google.com
PING google.com (216.58.195.238): 56 data bytes
Request timeout for icmp_seq 0
64 bytes from 216.58.195.238: icmp_seq=0 ttl=53 time=1064.747 ms
^C
$
и теперь оригинальная вещь, которую я вставил, находится в моем буфере обмена Mac.
command-line
clipboard
Пол Тарьян
источник
источник
pbcopy
и это будет тот же вопрос.pbcopy
иC-a C-]
к своему стандарту.Ответы:
Один из вариантов - включить трассировку (с
-x
) в подоболочке, которая запускает команду. Это записывает команду в STDERR и стандартный вывод в STDOUT. Соберите и то и другоеpbcopy
:источник
set -x
это интересный подход. Хорошо подмечено!+
чтобы это было$
PS4='\\$ ${BASH_SOURCE[0]:-inherited}:line ${LINENO}:${FUNCNAME[0]:+${FUNCNAME[0]}(): } '
. «\\ $» делает «$» первым символом, и этот символ затем повторяется, чтобы показать уровень вызова. ($ для первого уровня, $$ для второго уровня и т. д.)Вы можете использовать
script
утилиту для захвата всего взаимодействия, включая ваше приглашение, команду и ее вывод:Затем вы можете просмотреть файл, и его содержимое уже будет в вашем буфере обмена.
Вы также можете:
источник
$
и он позволяет мне выполнять много команд, где я хочу только одну, и добавляет заголовок и нижний колонтитул, который я не хочу.-q
. Вы можете использоватьsed
дляsed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
script temp.log env PS1='$ ' bash --norc
чтобы получить bash с подсказкой, которую вы хотите. Кроме того, вы можете отредактировать свой,~/.bashrc
чтобы проверить использованиеscript
и изменить подсказку:[ $(ps -o command= -p $PPID) = 'script' ] && PS1='$ '
iterm2 имеет встроенную оболочку, которая позволяет вам выбрать (и автоматически скопировать) вывод последней команды с помощью cmd-shift-A.
источник
Из вашего комментария к другому ответу вы не хотите, чтобы копировалась вся ваша подсказка, а только
$
.Как я решаю это просто:
Легко. Затем я использую мышь, чтобы скопировать и вставить приглашение, команду и вывод, который я хочу.
Для другого случая использования, когда я просто хочу, чтобы команда, а не ее вывод и не приглашение, чтобы кто-то мог давать кому-то инструкции, я настроил псевдоним
zv
(близко к «Command V» на клавиатуре), чтобы скопировать последняя команда в мой буфер обмена :Обратите внимание на использование
printf
и подстановку команд, чтобы избежать включения новой строки изhistory
в буфер обмена.источник
Если вы уже используете,
GNU screen
вы можете скопировать выбор непосредственно с помощью внешнего инструмента. Например, я добавил это в~/.screenrc
Linux:Теперь я могу отметить выбор с помощью Control- a [, нажмите Spaceи теперь нажмите Control- a bдля запуска
xsel
. Это не моя идея, это на самом деле довольно часто . Обратите внимание, что некоторые люди используют егоpbcopy
вместо,xsel
чтобы он мог работать без проблем.источник