Komutumu ve çıktısını yapıştırma komutu


9

Genellikle github böceğine bir şey göndermek istiyorum.

$ 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

Şu anda komutu çalıştırıyorum, alanı vurgulamak, bu arabelleğe kopyalamak, yapıştırmak , bir dosyaya yazmak ve daha sonra içine yazmak için screen's C-a C-[kullanın . Daha iyi bir yol olmalı.entervimcatpbcopy

Çalıştırabileceğim bir komut var mı ? teeYazdığım komut a $ve tüm çıktıların önüne eklenmiş pbcopymi? Ya da yakın bir şey? Öngörüyorum

$ 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
$

ve şimdi yapıştırdığım orijinal şey mac panomda.


Bu gerçekten OS X'e özgü mü?
phk

Hayır! Bir dosyadan diğer platformlardaki bir panoya geçmek için kullandığınız yardımcı programın yerine kullanılabilir pbcopyve aynı soru olurdu.
Paul Tarjan

2
Meraklı: neden fareyi kullanmıyorsun?

2
Tüm vim bölümünü dışarıda bırakabilirsiniz. Sadece koşmak pbcopyve C-a C-]onun stdin.

@hop fareyi kullanmak yavaş ve metin değerinde birden çok ekran olduğunda iyi çalışmıyor
Paul Tarjan

Yanıtlar:


10

Bir seçenek, -xkomutu çalıştıran bir alt kabukta izlemeyi (ile ) etkinleştirmektir . Bu komut STDERR'a ve standart çıktı STDOUT'a yazar. Her ikisini de toplayın ve boruları pbcopy:

$ ( set -x; ping -c 3 google.com ) 2>&1 | pbcopy

$ pbpaste
+ ping -c 3 google.com
PING google.com (173.194.217.138): 56 data bytes
64 bytes from 173.194.217.138: icmp_seq=0 ttl=44 time=37.436 ms
64 bytes from 173.194.217.138: icmp_seq=1 ttl=44 time=38.891 ms
64 bytes from 173.194.217.138: icmp_seq=2 ttl=44 time=39.329 ms
--- google.com ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 37.436/38.552/39.329/0.809 ms

set -xilginç bir yaklaşım. İyi tespit!
DopeGhoti

Ayrıca komutumun da basılmasını görmek isterdim (tercihen 2 farklı akışta hala) ve +olmak istiyorum$
Paul Tarjan

1
@PaulTarjan: PS4'ü buna göre değiştirin. Bir exemple (değil mi, ama gösterileri bazı olası seçenekler gerekenler): PS4='\\$ ${BASH_SOURCE[0]:-inherited}:line ${LINENO}:${FUNCNAME[0]:+${FUNCNAME[0]}(): } '. "\\ $", "$" karakterini ilk karakter haline getirir ve bu karakter daha sonra çağrı seviyesini göstermek için tekrarlanır. (birinci seviye için $, ikinci seviye için $$)
Olivier Dulac

7

scriptKomut isteminiz, komutunuz ve çıktısı dahil tüm etkileşimi yakalamak için yardımcı programı kullanabilirsiniz :

script temp.log; cat temp.log | pbcopy
[ do stuff ]
[ end the interaction with ^D or logging out of the shell ]

Daha sonra dosyayı inceleyebilirsiniz ve içeriği zaten panonuzda olacaktır.

Ayrıca şunları da yapabilirsiniz:

script temp.log 'somecommand'; cat temp.log | pbcopy

Bu yakın. Sadece istediğim yerde tüm istemimi içeriyordu $ ve sadece bir tane istediğim birçok komut yapmama izin veriyor ve istemediğim bir üstbilgi ve altbilgi ekliyor.
Paul Tarjan

1
ANSI dizilerini bastırabileceğini sanmıyorum (tasarım gereği tüm oturumu yakalamak için orada olduğu gibi), ancak başlığı bastırabilirsiniz. Man sayfasını kontrol edin -q. sedANSI kodlarını çıkarmak için kullanabilirsiniz :sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
DopeGhoti

2
İstediğiniz script temp.log env PS1='$ ' bash --norcistemi içeren bir bash almak için kullanabilirsiniz . Alternatif olarak , istemin ~/.bashrckullanımını kontrol etmek scriptve değiştirmek için düzenleyebilirsiniz :[ $(ps -o command= -p $PPID) = 'script' ] && PS1='$ '
Eric


1

Başka bir yanıt hakkındaki yorumunuzdan, isteminizin tamamının kopyalanmasını istemezsiniz , yalnızca $.

Bunu nasıl çözeceğim basitçe:

16:54:53 [myname mydirectory] 535 $ bash
bash-3.2$ PS1='\$ '
$ echo some command
some command
$ exit
exit
16:57:17 [myname mydirectory] 536 $

Kolay. Sonra istediğim bilgi istemi, komut ve çıktıyı kopyalayıp yapıştırmak için fareyi kullanıyorum.


Ben farklı bir kullanım durumunda için sadece değil, onun çıktı üretmesi ve istemi komutunu istiyorum, ben bir takma ad, kurdum birisi talimatlar vermesi mümkün zviçin (klavyede yakın "Komut V" için) kopyalamak panomuza son komut :

alias zv='printf %s "$(history -p \!\!)" | pbcopy'

Kullanımına dikkat printftrailing yeni satır önlemek ve komut ikamesi historypanoya.


0

Şu anda komutu çalıştırıyorum, alanı vurgulamak için ekranın Ca C- [tuşunu kullanıyorum, o ara belleğe kopyalamak için giriyorum,

Zaten kullanıyorsanız GNU screenharici bir araç kullanarak seçimi doğrudan kopyalayabilirsiniz. Örneğin, bunu ~/.screenrcLinux'ta ekledim :

bind b eval writebuf 'exec /bin/sh -c " xsel -i </tmp/screen-exchange"' 'exec /bin/sh -c "killall xsel"'

Şimdi bir seçim wih umudu işaretleyebilirsiniz Control- a [basın Spaceşimdi ve basın Control- a bçalıştırmak için xsel. Benim fikrim değil, aslında oldukça yaygın . Not bazı insanlar ile kullanmak pbcopyyerinexsel sizin için çalışabilir, böylece herhangi bir sorun olmadan.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.