คัดลอกคำสั่งสุดท้ายในเทอร์มินัล


22

ฉันสามารถดูคำสั่งสุดท้ายในเทอร์มินัลได้โดยกดup arrowตามตัวอย่างต่อไปนี้:

ฉันพิมพ์cd /:

Makss-Mac:~ maks$ cd /

... กดenter, cd /ดำเนินการคำสั่งและตอนนี้ฉันสามารถกดup arrowและดูคำสั่งcd /อีกครั้ง:

Makss-Mac:/ maks$ cd /

ฉันต้องการไม่เพียง แต่เห็นคำสั่งสุดท้าย แต่คัดลอกไปยังคลิปบอร์ด

อาจมีทางลัดที่ไม่เพียงแสดงคำสั่งสุดท้ายในเทอร์มินัล (เช่นเดียวup arrow) แต่ในเวลาเดียวกันให้คัดลอกไปยังคลิปบอร์ด

หรืออาจจะมีทางลัดสำหรับเลือกทั้งหมดจากสายเทอร์มินัลปัจจุบัน และดังนั้นผมจึงจะสามารถที่จะคัดลอกคำสั่งสุดท้าย (หลังจากที่กดup arrow) super+cโดยการกด แน่นอนฉันสามารถเลือกได้ด้วยเมาส์ แต่เมื่อคำสั่งอยู่ในระยะเวลานานกว่า 10 เท่าcd /อาจใช้เวลานานเกินไปโดยเฉพาะถ้าคุณทำทุก ๆ 30 วินาที

หรืออาจจะมีวิธีเขียนปลั๊กอินสำหรับเทอร์มินัล


มันอาจจะง่ายกว่าที่จะหาวิธีแก้ปัญหาที่นี่ถ้าคุณสามารถเพิ่มรายละเอียดบางอย่างเกี่ยวกับสิ่งที่คุณตั้งใจจะทำกับเนื้อหาของคลิปบอร์ดในภายหลัง คุณจะวางมันไว้ที่ไหน
nohillside

ใช่เพื่อวางลงในแท็บเทอร์มินัลอื่น
Maxim Yefremov

คำตอบ:


17

ใส่สิ่งนี้ลงในของคุณ~/.bashrc ~/.bash_profileหรือที่ไหนก็ได้ที่คุณชอบ:

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

หลังจากเปิดหน้าต่างใหม่ (หรือเรียกใช้source ~/.bash_profile) คุณควรจะสามารถเรียกใช้copyLastCmdและมีคำสั่งในคลิปบอร์ด

ที่จะอธิบายสิ่งที่เกิดขึ้น: คุณพื้นโดยใช้คำสั่ง "แก้ไข" ( fc) เพื่อให้คุณได้รับคำสั่งสุดท้ายให้ถอดทั้งชั้นนำและต่อท้ายช่องว่างสำหรับการจัดรูปแบบที่ดีกว่าด้วยawkและคัดลอกลงในนามบัตรของ Mac pbcopyของคุณด้วย

แก้ไข:

ตอนนี้เรารู้แล้วว่าคุณต้องการคัดลอกเพื่อวางลงในแท็บเทอร์มินัลอื่นมีตัวเลือกอื่น: เพิ่มบรรทัดเหล่านี้ลงใน~/.bashrc ~/.bash_profileที่ที่คุณชอบ:

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

จากนั้นเมื่อคุณเปิดแท็บใหม่ขึ้นมาแล้ว (เรียกว่า "แท็บ A" และ "แท็บ B"):

  1. ดำเนินการคำสั่งใด ๆ ในแท็บ A
  2. สลับไปที่แท็บ B กด Enter บนบรรทัดว่างให้บรรทัดใหม่ "สด" (และประเมินประวัติอีกครั้ง)
  3. ใช้ลูกศรขึ้นหนึ่งครั้งและคุณควรมีคำสั่งที่คุณเพิ่งป้อนในแท็บ A

แก้ไข 2: ฉันได้แทนที่การใช้ของsedด้วยawkในคำตอบเดิมข้างต้นเพื่อดูแลทั้งช่องว่างชั้นนำและต่อท้าย


นั่นเป็นนามแฝงที่ยอดเยี่ยม! เพื่อตัดบรรทัดใหม่ต่อท้ายเพื่อให้คุณสามารถแก้ไขคำสั่งหลังจากวางฉันใช้awk:alias copyLastCmd='fc -ln -1 | sed '1s/^[[:space:]]*//' | awk 1 ORS="" | pbcopy '
nwinkler

@nwinkler: โอ้คุณถูกต้องควรใช้ awk: fc -ln -1 | awk '{$1=$1}1'จะลบทั้งช่องว่างและช่องว่างนำหน้า
Asmus

1
alias copyLastCmd="fc -ln -1 | awk '{\$1=\$1}1' | pbcopy"มีการปรับเปลี่ยนนามแฝงสำหรับตัวอักษรพิเศษ ยังได้รับการโหวตของฉัน
Mike D

1
ฉันใช้สิ่งนี้จนกว่าฉันจะได้ "git -reset --hard" บนเทอร์มินัลหนึ่งและในอีกโฟลเดอร์ "git ที่ไม่สงสัย" กดลูกศรขึ้นและป้อนอย่างเร่งรีบอย่างที่ฉันคิดว่าฉันใช้สคริปต์ที่ฉันใช้มาก่อน คุณสามารถจินตนาการได้ว่าเกิดอะไรขึ้นและนั่นเป็นครั้งสุดท้ายที่ฉันใช้ประวัติ "ทั่วโลก" ที่แชร์นี้
MrGigu

@MrGigu เกิดขึ้นกับฉันด้วยประวัติศาสตร์ "ท้องถิ่น" ที่ฉันกดลูกศร "ขึ้น" สองครั้งแทนที่จะเป็นครั้งเดียวโดยบังเอิญ - บทเรียนเรียนรู้วิธีที่ยากฉันเดา
Asmus

5

ต่อไปนี้เป็นอีกสิ่งหนึ่งที่ขึ้นอยู่กับคำตอบของ @Asmus เพื่อให้นามแฝงของเขาทำงานในสคริปต์ทุบตีของฉันฉันต้องใช้การอ้างอิงเล็กน้อยเนื่องจากเครื่องหมายคำพูดเดี่ยวไม่ทำงานในนามแฝงที่ยกมาเดี่ยวโดยไม่มีการอ้างถึงเพิ่มเติม:

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

'\''โดยทั่วไปจะปิดใบเสนอราคาปัจจุบันแล้วเพิ่มอ้างหนีแล้วเปิดใบเสนอราคาที่เกิดขึ้นจริงอีกครั้ง

เวอร์ชันด้านบนจะคัดลอกคำสั่งสุดท้ายไปยังคลิปบอร์ดของคุณและเมื่อคุณวางคำสั่งมันจะถูกดำเนินการทันทีเนื่องจากจะมีการขึ้นบรรทัดใหม่ในตอนท้าย

เมื่อต้องการกำจัดบรรทัดใหม่ในตอนท้ายเพื่อให้คุณสามารถแก้ไขคำสั่งจริงก่อนเรียกใช้คุณสามารถทำสิ่งต่อไปนี้:

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

ORS=''(ว่าโดยไม่ต้องอ้าง) จะตัดออกจากตัวอักษรต่อท้ายบรรทัดใหม่เพื่อให้คุณสามารถแก้ไขข้อความที่วางก่อนที่จะใช้มัน


5

นี่จะใช้การขยายประวัติเพื่อคว้าคำสั่งสุดท้ายแล้วสะท้อนออกมา คุณสามารถไปที่pbcopyเพื่อบันทึกคำสั่งสุดท้ายไปยังคลิปบอร์ดของคุณ

> echo !! | pbcopy

หากคุณต้องการคำสั่งจากประวัติที่ไม่ใช่คำสั่งสุดท้ายคุณสามารถเรียกใช้:

> history

และอ้างอิงหมายเลขคำสั่งที่ต้องการเช่น:

> echo !5 | pbcopy

มันอาจจะเป็นสิ่งที่คุณโปรดปรานและอาจใช้งานได้ แต่คุณต้องอธิบายให้ฟังหน่อยว่าคำสั่งทำอะไรและ OP (ผู้ที่ยอมรับคำตอบหนึ่งในห้าปีที่แล้ว) สามารถใช้งานได้อย่างมีประสิทธิภาพ
IconDaemon

@IconDaemon โทรดีมาก ฉันคิดว่ามันน่าจะเพิ่มคำถามเก่าเพราะมันง่ายกว่าคำตอบที่ยอมรับเพราะมันไม่ต้องการการปรับแต่งโปรไฟล์ใด ๆ
Sam Berry

4

ฉันมาที่นี่พร้อมกับคำตอบเดียวกันของ Sam Berry แต่มันไม่ได้ผลสำหรับฉัน (OSX 10.14.6)

จัดการเพื่อให้มันทำเช่นนั้นด้วยคำพูดรอบ!!:

echo "!!" | pbcopy


3

คุณสามารถตั้งค่าประวัติของคุณให้เพิกเฉยคำสั่งที่ขึ้นต้นด้วยช่องว่าง:

export HISTIGNORE=' *'

จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อคอมไพล์คำสั่งสุดท้ายไปยังคลิปบอร์ด (ตรวจสอบให้แน่ใจว่าคุณมีช่องว่างที่จุดเริ่มต้น):

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

คุณอาจต้องการบันทึกคำสั่งเป็นนามแฝงเพื่อให้จดจำได้ง่ายขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.