บางครั้งเมื่อฉันเรียกใช้คำสั่งฉันไม่ได้สังเกตว่าฉันต้องการเรียกใช้ในฐานะผู้ใช้ขั้นสูงเพื่อให้ได้รับอนุญาตเพียงพอ
มีวิธีเรียกใช้คำสั่งเดียวกันอีกครั้ง แต่เป็นผู้ใช้ super หรือไม่?
บางครั้งเมื่อฉันเรียกใช้คำสั่งฉันไม่ได้สังเกตว่าฉันต้องการเรียกใช้ในฐานะผู้ใช้ขั้นสูงเพื่อให้ได้รับอนุญาตเพียงพอ
มีวิธีเรียกใช้คำสั่งเดียวกันอีกครั้ง แต่เป็นผู้ใช้ super หรือไม่?
คำตอบ:
!!
history
นอกจากนี้การทำ!-1
, !-2
และอื่น ๆ ดำเนินการคำสั่งของคุณที่ผ่านมาคำสั่งสุดท้ายที่สองและอื่น ๆ ที่มีประโยชน์!
!<command>
จะดำเนินการเหตุการณ์สุดท้ายจาก~/.bash_history
ที่เริ่มต้นด้วย<command>
!
สิ่งทุบตีโง่ ๆที่คัดลอกมาจากtcsh
นี้ทำให้ฉันเสียเวลามากกว่าที่เคยเป็นประโยชน์ !
ราคาคู่ไม่ได้ป้องกันจากการตีความของ ->$ foo "!bar"
!bar: event not found
คำตอบ :คุณป้อนsudo !!
ทันทีหลังจากนั้นเพื่อทำซ้ำคำสั่งก่อนหน้าด้วยสิทธิ์ที่เพิ่มขึ้น
แก้ไข: พบรูปภาพผ่านredditและเป็นเรื่องตลกของการ์ตูน xkcd ต้นฉบับโดย Randall Munroe
คุณสามารถลองใช้ปุ่มลูกศรขึ้นเพื่อเลื่อนดูคำสั่งเก่าและเขียนใหม่ / เปลี่ยนคำสั่งเหล่านั้นและเพิ่มคำสั่งsudo
ด้านหน้า (ปุ่มโฮมเหนือปุ่มลูกศรจะกำหนดตำแหน่งเป็นจุดเริ่มต้น)
ฉันไม่ชอบsudo !!
ความคิดเพราะบางครั้งคุณเพิ่มคำสั่งอื่นในระหว่างและจำไม่ได้อีกต่อไป
sudo !!
นี้เชลล์จะขยายตัว!!
เพื่อให้คุณเห็นคำสั่งที่พยายามเรียกใช้ ดังนั้นมันอาจจบลงด้วยการหงุดหงิดที่จะกด Ctrl-C และค้นหาคำสั่งที่ถูกต้อง แต่อย่างน้อยมันก็ไม่ทำให้คุณไม่รู้ตัว
!!
sudo !!<TAB>
และเติมข้อความอัตโนมัติ!!
ให้ฉัน Bash สามารถขยายประวัติด้วยM-^
(สำหรับฉัน, alt + shift + 6), แต่มันก็คล่องแคล่วน้อยกว่า (คุณสามารถปฏิเสธเรื่องนี้ได้) นอกจากนี้ยังมีshopt -s histverify
ซึ่งจะทำให้เมื่อคุณใช้การขยายประวัติและกด Enter มันจะให้บรรทัดการแจ้งเตือนอื่นพร้อมการขยายที่ดำเนินการเพื่อให้คุณเห็น / แก้ไข
shopt -s histverify
ไม่ช่วยสักหน่อย คนส่วนใหญ่จะคุ้นเคยกับการกดปุ่มEnter
สองครั้ง ณ จุดนั้นพวกเขายังคงสายเกินไปที่จะตรวจสอบสิ่งที่เกิดขึ้น
ฉันจะเพิ่มทางเลือกอื่น: สั้นเท่ากับพิมพ์sudo !!
และยืดหยุ่นมากขึ้น:
Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A (place cursor at beginning of line)
"sudo "
Enter
มันเป็นจำนวนการกดแป้นที่เท่ากัน (ฉันนับว่า "ctrl + A" เป็นหนึ่ง ... ) แต่การเพิ่ม "ลูกศรขึ้น" คุณสามารถทำได้ตามคำสั่งใดก็ตามที่อยู่ในประวัติของคุณ
set -o vi
) จากนั้นคุณสามารถหลบหนี (ไปที่โหมดคำสั่ง) จากนั้น 'ฉัน' (ตัวพิมพ์ใหญ่ 'i' ใส่ที่จุดเริ่มต้นของบรรทัด)
มีสองสามวิธีในการทำเช่นนี้
เพียงป้อนคำสั่งอีกครั้งเพิ่มsudo
ก่อนคำสั่ง
กดUp arrowเพื่อรับคำสั่งสุดท้ายและวางไว้sudo
ข้างหน้า
เข้าสู่ sudo !!
การ!!
ขยายเป็นคำสั่งที่ป้อนล่าสุด คุณสามารถทำสิ่งที่คล้ายกันกับสิ่งอื่น ๆ ด้วยประวัติบรรทัดคำสั่งดูที่นี่
คำถามนี้อาจถูกทำให้กลายเป็น " Run command command แต่มีการดัดแปลงบางอย่าง " เนื่องจากหนึ่งในการตัดสินใจการออกแบบที่ยอดเยี่ยมใน Unix คือสิ่งที่ถูกนำไปใช้ครั้งเดียวในเชลล์สามารถใช้ประโยชน์จากคำสั่งใด ๆ ที่ถูกเรียกจากเชลล์
ในคำอื่น ๆ , เคล็ดลับนี้ใช้ไม่ได้เพียง เพื่อsudo
:
sudo !!
)time !!
)env A=b B=z !!
)!!
)การขยายประวัติ (หรือเรียกอีกอย่างว่าการทดแทนประวัติ) เป็นเพียงคุณลักษณะของเชลล์เพื่อให้การทำซ้ำคำสั่งก่อนหน้านี้ง่ายขึ้น (โดยมีการกดแป้นน้อยกว่า) history expansion
ตรวจสอบหน้าคนเปลือกของคุณสำหรับ มันอธิบายถึงเทคนิคและทางลัดอื่น ๆ อีกมากมายที่คุณสามารถทำได้ด้วยประวัติเช่น:
คุณอาจอ้างถึงคำสั่งก่อนหน้าตามหมายเลข:
!55 # repeat command number 55
!-1 # repeat the previous command, alias for !!
!-2 # repeat the command before the previous command
คุณอาจอ้างถึงคำแต่ละคำในคำสั่งก่อนหน้า:
some-command !$ # run some-command on the last arg of previous command
คุณยังสามารถค้นหาก่อนทำซ้ำ:
!?awk # repeat the last command including the string 'awk'
คุณสามารถค้นหาประวัติและแทนที่บางสิ่งด้วยสิ่งอื่น:
!?awk?:s/str1/str2/ # repeat previous command matching 'awk' replacing str1 by str2
และอีกมากมายเนื่องจากคุณสามารถรวมการเลือกคำสั่งการเลือก arg การค้นหาและแทนที่ได้อย่างอิสระ
man page ของเชลล์ของคุณ (ในกรณีนี้man bash
) คือเพื่อนของคุณ
ฉันใช้zshแทนทุบตีและมีอยู่ในของฉัน~/.zshrc
ดังนั้นกดAlt+ Sแทรกsudo
ที่จุดเริ่มต้นของบรรทัดคำสั่ง:
insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo
น่าเสียดายที่ฉันไม่สามารถติดตามวิธีการทำสิ่งเดียวกันในการทุบตี
หากคุณต้องการทำในนามแฝงคุณต้องใช้alias redo='sudo $(history -p !!)'
ด้วยเหตุผลบางอย่าง
su -c "!!"
หากคุณไม่ได้รับอนุญาตให้เป็น root ด้วย sudo หรือโปรแกรม sudo ไม่ได้ติดตั้งบนระบบ
วิธีที่ฉันชอบ:
แต่มันอาจจะง่ายกว่าถ้าคุณทำ "sudo !!" ขึ้นอยู่กับคุณ