terminaldeki son komutu kopyala


22

Terminaldeki son komutu up arrowaşağıdaki örnekte olduğu gibi basarak görebilirim :

Yazdım cd /:

Makss-Mac:~ maks$ cd /

... basıldı enter, komut cd /çalıştırıldı ve şimdi tekrar basıp up arrowkomutu görebiliyorum cd /:

Makss-Mac:/ maks$ cd /

Sadece son komutu görmek değil, panoya kopyalamak istiyorum.

Belki de sadece terminaldeki son komutu göstermek için değil ( up arrowaynı zamanda) panoya kopyalamak için kısayol var .

Veya belki de mevcut terminal hattından hepsini seçmek için kısayol var. Ve bu yüzden (bastıktan sonra geçen komutu kopyalamak mümkün olacak up arrowbasarak) super+c. Tabii ki fare ile seçebilirim. Ancak komutlar 10 kat daha uzun olduğunda cd /, özellikle her 30 saniyede bir yaptığınız zaman çok zaman alabilir.

Belki de Terminal için eklenti yazmanın bir yolu vardır.


Daha sonra pano içeriği ile ne yapmak istediğinize dair bazı ayrıntılar ekleyebilirseniz, burada bir çözüm bulmak daha kolay olabilir. Nereye yapıştıracaksın?
yokuş yukarı

Evet, başka bir terminal sekmesine yapıştırmak için
Maxim Yefremov 13:13

Yanıtlar:


17

Bunu içine ~/.bashrc ~/.bash_profileveya istediğiniz yere yerleştirin:

alias copyLastCmd='fc -ln -1 | awk '{$1=$1}1' | pbcopy '

Yeni bir pencere açtıktan (ya da çalıştırdıktan sonra source ~/.bash_profile) panoda çalıştırıp copyLastCmdkomutunuz olmalıdır.

Neler olduğunu açıklamak için: temelde "fix command" ( fc) işlevini kullanarak son komutu alırsınız, daha iyi biçimlendirme için hem öncü hem de sondaki boşlukları kaldırır awkve sonra Mac'inizin çalışma alanına kopyalarsınız pbcopy.

DÜZENLE:

Artık başka bir terminal sekmesine yapıştırmak istediğiniz kopyalamayı istediğinizi biliyoruz, başka bir seçenek daha var: Bu satırları kendinize ~/.bashrc ~/.bash_profileveya istediğiniz yere ekleyin :

shopt -s histappend
PROMPT_COMMAND='$PROMPT_COMMAND; history -a; history -n'

Ardından, bazı yeni sekmeler açıldıktan sonra ("sekme A" ve "sekme B" olarak adlandıralım):

  1. Sekme A'daki herhangi bir komutu yürütün
  2. Sekme B'ye geçin, boş bir satıra girin, size "yeni" bir satır ekleyin (ve böylece geçmişi yeniden değerlendirin)
  3. yukarı oku bir kez kullanın ve A sekmesine girdiğiniz komutu almanız gerekir.

DÜZENLEME 2: Ben kullanımını yerini ettik sedile awkhem baştaki ve sondaki boşluk bakmak, yukarıda orijinal cevap.


Bu harika bir takma isim! Sondaki yeni satırı kesmek için, böylece yapıştırdıktan sonra komutu düzenleyebilirsiniz, kullandım awk:alias copyLastCmd='fc -ln -1 | sed '1s/^[[:space:]]*//' | awk 1 ORS="" | pbcopy '
nwinkler

@nwinkler: OH haklısın, awk kullanmalıydın: fc -ln -1 | awk '{$1=$1}1'hem sondaki hem de baştaki boşlukları kaldıracak.
Asmus,

1
özel karakterler için takma adı değiştirmek zorunda kaldı alias copyLastCmd="fc -ln -1 | awk '{\$1=\$1}1' | pbcopy". hala benim artı oyum alır
Mike D

1
Bunu bir terminalde "git -reset --hard" yazıp başka bir "şüphelenmeyen git klasöründe" basana kadar kullandım ve acaba daha önce kullandığım bir senaryoyu çalıştırdığımı düşündüğüm gibi girdim. Ne olduğunu hayal edebilirsiniz ve bu paylaşılan "küresel" tarihi en son kullandığım
zamandı

@ MrGigu başıma "yukarı" okunu iki kez bastığım "yerel" bir tarihle başıma geldi, bir kere değil, yanlışlıkla - dersler zor yoldan öğrendi sanırım.
Asmus,

5

İşte cevap @Asmus'un cevabına dayanarak başka bir cevap. Takma adını bash betiğimde çalışmasını sağlamak için, biraz alıntı kullanmak zorunda kaldım, çünkü tek tırnak işaretleri, bazı alıntılar olmadan, tek tırnaklı diğer adlarda çalışmaz:

alias copyLastCmd='fc -ln -1 | awk '\''{$1=$1}1'\'' | pbcopy'

Bu '\'', şu anki alıntıyı temel olarak kapatır, sonra bir kaçış teklifi ekler ve ardından gerçek teklifi yeniden açar.

Yukarıdaki sürüm panoya son komutu kopyalayacak ve yapıştırdıktan sonra, sonunda yeni bir satır olacak şekilde derhal çalıştırılacaktır .

Sonunda newline'dan kurtulmak için komutu çalıştırmadan önce gerçekten düzenleyebilmeniz için aşağıdakileri yapabilirsiniz:

alias copyLastCmd='fc -ln -1 | awk '\''{$1=$1}1'\'' ORS='\'''\'' | pbcopy'

ORS=''(En olmadan alıntı) bunu çalıştırmadan önce yapıştırılan metni düzenlemek, böylece sondaki satır karakteri kapalı şerit olacak.


5

Bu , son komutu alıp yankılanmak için tarih genişletmeyi kullanacaktır . pbcopyPanoya son komutu kaydetmek için boru olabilir .

> echo !! | pbcopy

Geçmişinizden sonuncusu olmayan bir komut istiyorsanız, çalıştırabilirsiniz:

> history

Ve istediğiniz komut numarasına şöyle bakın:

> echo !5 | pbcopy

En sevdiğiniz olabilir ve hatta işe yarayabilir, ancak komutun gerçekte ne yaptığı ve OP'nin (beş yıl önce cevaplardan birini kabul eden) etkili bir şekilde nasıl kullanabileceği hakkında biraz açıklama yapmanız gerekir .
IconDaemon

@IconDaemon iyi çağrı. Bunun eski bir soruya eklemeye değer olduğunu düşünüyorum çünkü herhangi bir profil özelleştirmesi gerektirmediğinden kabul edilen yanıttan daha basit.
Sam Berry,

4

Buraya Sam Berry'nin aynı cevabıyla geldiğim gibi geldim, ancak bu benim için işe yaramıyor (OSX 10.14.6).

Bunu şu şekilde yapılan alıntılarla yapmayı başardı !!:

echo "!!" | pbcopy


3

Geçmişinizi bir boşlukla başlayan komutları yoksaymak üzere ayarlayabilirsiniz:

export HISTIGNORE=' *'

Ardından panoya son komutu gitmek için aşağıdaki komutu çalıştırın (başında bir alan olduğundan emin olun):

history 1 | cut -d " " -f 4- | pbcopy

Muhtemelen hatırlamayı kolaylaştırmak için komutu takma ad olarak kaydetmek istersiniz.

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.