Fråga:
kopiera sista kommandot i terminalen
Maxim Yefremov
2013-11-13 00:36:15 UTC
view on stackexchange narkive permalink

Jag kan se sista kommandot i terminalen genom att trycka på uppåtpilen som i följande exempel:

Jag skrev cd / :

  Makss-Mac: ~ maks $ cd /  

... tryckt enter , kommando cd / körs och nu kan jag trycka uppåtpilen och se kommandot cd / igen:

  Makss-Mac: / maks $ cd /  

Jag vill inte bara se det senaste kommandot utan kopiera det till Urklipp.

Det finns kanske genväg som inte bara visar det sista kommandot i terminalen (som uppåtpilen gör) utan samtidigt kopierar det till Urklipp.

Eller kanske finns det en genväg för att välja allt från aktuell terminalrad. Och så kommer jag att kunna kopiera det senaste kommandot (efter att ha tryckt uppåtpilen ) genom att trycka på super + c . Naturligtvis kan jag välja det med musen. Men när kommandon är tio gånger längre än cd / kan det vara för tidskrävande, speciellt om du gör det var 30: e sekund.

Eller kanske finns det ett sätt att skriva plugin för terminal

Det kan vara lättare att hitta en lösning här om du kan lägga till lite information om vad du tänker göra med innehållet på Urklipp efteråt. Var ska du klistra in den?
ja för att klistra in den på en annan terminalflik
Fem svar:
Asmus
2013-11-13 01:17:31 UTC
view on stackexchange narkive permalink

Lägg detta i din ~ / .bashrc ~ / .bash_profile eller var du än vill:

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

När du öppnat ett nytt fönster (eller kört source ~ / .bash_profile ) bör du kunna köra copyLastCmd och ha kommandot i urklipp.

För att förklara vad som händer: du använder i princip "fix command" ( fc ) för att få dig det sista kommandot, ta bort både ledande och efterföljande vitt utrymme för trevligare formatering med awk och kopiera det sedan till din Macs kartong med pbcopy.

EDIT:

Nu när vi vet att du vill kopiera för att klistra in på en annan terminalflik finns det ett annat alternativ: Lägg till dessa rader i din ~ / .bashrc ~ / .bash_profile kod > eller var du än gillar det:

  shopt -s histappendPROMPT_COMMAND = '$ PROMPT_COMMAND; historia -a; historia -n ' 

Sedan, när du har några nya flikar öppna (låt oss kalla dem "flik A" och "flik B"):

  1. Kör valfritt kommando i flik A
  2. Byt till flik B, tryck på enter på en tom rad, vilket ger dig en "ny" ny rad (och därmed utvärdera historiken)
  3. använd uppåtpilen en gång och du borde ha kommandot du just har angett på flik A.

REDIGERA 2: Jag har bytt ut användningen av sed med awk i det ursprungliga svaret ovan, för att ta hand om både ledande och efterföljande mellanslag.

Det är ett bra alias! För att klippa av den efterföljande nya raden, så att du kan redigera kommandot efter att du har klistrat in, använde jag `awk`:` alias copyLastCmd = 'fc -ln -1 | sed '1s / ^ [[: space:]] * //' | awk 1 ORS = "" | pbcopy ''
@nwinkler: OH du har rätt, borde ha använt awk: `fc -ln -1 | awk '{$ 1 = $ 1} 1' 'tar bort både efterföljande och ledande mellanslag.
var tvungen att ändra alias för speciella tecken 'alias copyLastCmd = "fc -ln -1 | awk' {\ $ 1 = \ $ 1} 1 '| pbcopy" `.fortfarande får min röst
Jag använde detta tills jag gjorde en "git -reset --hard" på en terminal och i en annan "intet ont anande git-mapp" tryckte upp pilen och ange snabbt när jag trodde att jag körde ett skript som jag använde tidigare.Du kan föreställa dig vad som hände, och det var sista gången jag använde denna delade "globala" historia
@MrGigu hände mig med en "lokal" historia där jag tryckte på "upp" pilen två gånger, istället för en gång, av misstag - lärdomarna lärde jag mig.
Sam Berry
2018-12-07 20:45:16 UTC
view on stackexchange narkive permalink

Detta kommer att använda utvidgning av historiken för att fånga det sista kommandot och eka det.Du kan pipa till pbcopy för att spara det sista kommandot i urklipp.

  > eko !!|pbcopy
 

Om du vill ha ett kommando från din historik som inte var det senaste kan du köra:

  >-historia
 

Och referera till önskat kommandonummer som:

  > echo! 5 |pbcopy
 
Det kan vara din favorit, och det kan till och med fungera, men du måste ge en liten beskrivning om vad kommandot _ faktiskt gör_ och hur OP (som accepterade ett av svaren för fem år sedan) kan använda det effektivt.
@IconDaemon bra samtal.Jag tycker att det här är värt att lägga till en gammal fråga eftersom det är enklare än det accepterade svaret eftersom det inte kräver någon profilanpassning.
nwinkler
2013-11-14 17:05:24 UTC
view on stackexchange narkive permalink

Här är ett annat tag baserat på svaret från @Asmus. För att få sitt alias att fungera i mitt bash-skript, var jag tvungen att använda lite citat, eftersom enstaka citat inte fungerar i ett enda citerat alias utan ytterligare citat:

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

' \ '' stänger i princip det aktuella offertet, lägger sedan till ett undantaget offert och öppnar sedan det faktiska offertet igen.

Ovanstående version kopierar det sista kommandot till ditt urklipp och när du klistrar in det körs det omedelbart, eftersom det kommer att ha en ny rad i slutet.

Till bli av med den nya raden i slutet, så att du faktiskt kan redigera kommandot innan du kör det, kan du göra följande:

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

ORS =' ' (det är utan citationstecken) tar bort det efterföljande nya linjetecknet så att du kan redigera den klistrade texten innan du kör den.

Chris Gillatt
2019-08-19 15:36:06 UTC
view on stackexchange narkive permalink

Jag kom hit som kom med Sam Berrys exakt samma svar, men det fungerar inte för mig (OSX 10.14.6).

Klarade att få det att göra med citat runt !! :

eko "!!"|pbcopy

kidbrax
2013-11-13 01:19:55 UTC
view on stackexchange narkive permalink

Du kan ställa in din historik så att den ignorerar kommandon som börjar med ett mellanslag:

  export HISTIGNORE = '*'  

Och kör sedan följande kommando för att skicka det sista kommandot till urklipp (se till att du har ett mellanslag i början):

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

Du skulle förmodligen vilja spara kommandot som ett alias för att göra det lättare att komma ihåg.



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...