ฉันจะสามารถ 'alias sudo !!' ได้อย่างไร?


50

ฉันกำลังพยายามตั้งชื่อแทนสำหรับsudo !!ใน Bash ฉันพยายามalias sbb='sudo !!'แต่มันตีความว่าเป็นตัวอักษร !!และภาพพิมพ์

sudo: !!: command not found

ถ้าฉันใช้อัญประกาศคู่มันจะใช้แทนการทำซ้ำสองครั้งในสตริงของตัวเองดังนั้นจึงไม่ทำงาน

มีวิธีการทำงานนี้หรือไม่? หรือชื่อแทนอื่น `



อาจเป็นไปได้เหมือนกันกับ SU: superuser.com/questions/240180/…
Ciro Santilli 事件改造中心中心法轮功六四

คำตอบ:


61

!!ถูกขยายโดย bash เมื่อคุณพิมพ์ มันไม่ได้ถูกขยายด้วยการทดแทน alias

คุณสามารถใช้historyบิวด์อินเพื่อทำการขยาย:

alias sbb='sudo $(history -p !!)'

หากคำสั่งเป็นมากกว่าคำสั่งง่ายๆ (เช่นมีการเปลี่ยนเส้นทางหรือไพพ์) คุณต้องเรียกใช้เชลล์ภายใต้ sudo:

alias sbb='sudo "$BASH" -c "$(history -p !!)"'

มีหนึ่งสำหรับ tcsh?
mdpc

1
@mdpc: ฉันไม่ได้ใช้ tcsh แต่ผมเหลือบมองไปที่man tcshและพบว่ามันไม่ทำการขยายตัวประวัติศาสตร์ระหว่างการขยายตัวนามแฝง "ประหนึ่งว่าคำสั่งเดิมสายการป้อนข้อมูลก่อนหน้านี้." น่าสนใจ อย่างไรก็ตามalias sbb 'sudo \!-2ไม่ทำงานตามที่คาดไว้ (จริง ๆ แล้วแทนที่รายการก่อนหน้าที่สอง); alias sbb 'sudo \!\!'ได้ทำงานตามที่คาดไว้ (แทนsbbสำหรับ!!); และในท้ายที่สุดมันกลับกลายเป็นว่าสิ่งที่ฉันต้องการก็คือที่ผมจะคาดหวังว่าจะเป็นเช่นเดียวกับalias sbb 'sudo \!-1' \!\!(tcsh 6.17.06 (Astron) 2011-04-15) YMMV โชคดี.
rici

ขอบคุณ! นามแฝงนี้ดีมากเมื่อเป็นผู้ดูแลระบบคุณลืมใส่ sudo ไว้หน้าคำสั่งของคุณ
mdpc

แทนที่จะsbbฉันต้องการpreaseเป็นนามแฝงตามที่แนะนำโดย @jpschorr
rubo77

40

ลอง:

alias sbb='sudo $(fc -ln -1)'

ฉันชอบที่จะตั้งชื่อมันว่า 'ได้โปรด':

alias please='sudo $(fc -ln -1)'

ข้อมูล: fcเป็นคำสั่งในตัวในเชลล์ bash แสดงรายการแก้ไขและเรียกใช้คำสั่งที่ป้อนไปยังเชลล์เชิงโต้ตอบก่อนหน้าอีกครั้ง


13
pleaseเป็นวิธีที่จะไปแน่นอน!
Anto

ใช้งานได้สำหรับทุบตีด้วยดังนั้นลบความคิดเห็น 'for zsh'
Michael Durrant

1
ทำงานได้ดีใน zsh fc เป็นคำสั่งที่ใช้ ขอบคุณ
Frax

pleaseทำให้รู้สึกเหมือนว่าเทอร์มินัลเป็นเอนทิตีที่ฉันต้องดีเพื่อที่จะได้ทำสิ่งต่าง ๆ ฉันชอบสิ่งที่ให้ความรู้สึกที่ดีของการควบคุมที่ชอบ - fuck;)
Przemek D

5

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

https://github.com/nvbn/thefuck


ฉันลองใช้ตัวเลือกapt-get install thefuckที่มีอยู่แล้ว แต่ไม่ได้ผลกับ Ubuntu 15.10 ของฉัน (
rubo77

0

เดิมนี้ถูกโพสต์ที่คำถามนี้แต่ต่อมาแนะนำให้โพสต์ที่นี่

นี่คือวิธีที่คุณสามารถใช้fcและhistoryด้วยนามแฝงสำหรับการ!-ทดแทนเช่น สมมติว่าถ้าคุณต้องการที่จะใช้!-n(ที่nเป็นหลักสำหรับ n THคำสั่งสุดท้ายที่ใช้) แล้วคุณสามารถใช้fcและhistoryมีนามแฝงดังต่อไปนี้:

  1. การใช้history:

    alias xyz='echo $(history -p "!-<n>") ; sudo $(history -p "!-n")'

    หมายเหตุ: นี่!-nควรจะล้อมรอบด้วยหรือ'''

  2. การใช้fc:

    alias xyz='echo $(fc -ln -n -n) ; sudo $(fc -ln -n -n)'

    หมายเหตุ: ที่นี่ 1 เซนต์และ 2 ครั้งที่ -nจะใช้ในการระบุช่วงของรายการประวัติ

!-<n>นี่ฉันใช้เสียงสะท้อนไอเอ็นจีก่อนที่จะดำเนินการคำสั่งสำหรับการตัดโค่นเช่น


คำตอบก่อนหน้านี้อยู่แล้วครอบคลุมและhistory -p fcมีอะไรใหม่ที่นี่บ้าง?
muru

ตกลงมันคืออะไร
muru

ฉันพบว่า-ln -n -nจะสับสนอย่างเข้มข้น; ยังบิตเกี่ยวกับ'หรือ''(และยังบิตเกี่ยวกับ-<n>)
สกอตต์

ตัวเลือกที่ 2 ต้องเป็นตัวพิมพ์ใหญ่ฉันคิดว่าคุณต้องการ$(fc -ln -1)
cmcginty

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