เรียกใช้คำสั่งสุดท้ายด้วยตัวอักษรทั้งหมดที่เปลี่ยนเป็นตัวพิมพ์เล็ก


15

หลายครั้งที่ฉันรันคำสั่งด้วยตัวอักษรทั้งหมดเป็นตัวพิมพ์ใหญ่ (อาจCapsLockเป็นเพราะใช้งานได้) และฉันกดEnterก่อนที่จะรู้ตัว

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


อัปยศคุณไม่ได้ใช้ zsh !!:l.
เควิน

คำตอบ:


19

คุณสามารถทำได้โดยเพิ่มฟังก์ชั่นเล็ก ๆ ต่อไปนี้ (ฉันเรียกมันว่า??ง่ายมาก แต่คุณสามารถเปลี่ยนได้ตามที่คุณต้องการ) ใน.bashrcไฟล์ของคุณ:

?? () { "${@,,}"; }

ถัดไปเมื่อคุณจะทำงาน:

?? !!

คำสั่งสุดท้ายจะทำงานด้วยตัวอักษรทั้งหมดเป็นตัวพิมพ์เล็ก

คำอธิบาย

  • !!: นี้เป็นส่วนหนึ่งของเครื่องมือประวัติทุบตีโดยเฉพาะ, มันจะขยายระยะคำสั่งสุดท้าย ตัวอย่างเช่นecho !!จะพิมพ์คำสั่งสุดท้ายที่รันในเชลล์เซสชั่นนี้โดยเฉพาะ
  • "${@,,}: โครงสร้าง${foo,,} จะแปลงเนื้อหาของตัวแปรที่$fooแปลงเป็นตัวอักษรตัวเล็กทั้งหมด $@คืออาร์เรย์ของพารามิเตอร์ตำแหน่ง เมื่อใช้ภายในฟังก์ชั่นมันจะถูกขยายไปยังพารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชันนั้น

ดังนั้น"${@,,}"จะแปลงสิ่งที่ผ่านไปยังฟังก์ชั่นเป็นตัวพิมพ์เล็กแล้วดำเนินการ ดังนั้นการเรียกใช้??ฟังก์ชันด้วย!!พารามิเตอร์จะแปลงคำสั่งสุดท้ายเป็นตัวพิมพ์เล็กและรัน


7
บางทีคุณอาจเพิ่มคำอธิบายว่ามันทำงานอย่างไร? มันเป็นความลับในแบบที่คุณเขียน นอกจากนี้มันใช้งานไม่ได้จริงเช่นนี้ ตามที่คุณเขียนมันจะทำงานได้อย่างถูกต้องหาก PWD ของคุณว่างเปล่า "!!"คุณจำเป็นต้องพูด
terdon

1
@terdon ตอนนี้ต้องขอบคุณเกล็นก็ควรจะทำงานในกรณีใด ๆ ... และมีอะไรที่มากเกินไปที่จะอธิบาย: ฟังก์ชั่น??แปลงตัวอักษรข้อโต้แย้งในการ lowercaes และ!!เขียนใหม่โดยอัตโนมัติคำสั่งก่อนหน้านี้ในคำสั่งปัจจุบัน (เพื่อ??จะเป็น โต้แย้งคำสั่งก่อนหน้า)
Radu Rădeanu

6
`echo !! | tr '[: upper:]' '[: lower:]' '

กุญแจอยู่ใน`ใบเสนอราคา (backticks) - ซึ่งรันเอาต์พุตเป็นคำสั่ง


2
backticks ที่มองไม่เห็นในรุ่นแรกของคำตอบเนื่องจากภาษามาร์กอัป ไม่จำเป็นต้อง downvote (โดยไม่มีความคิดเห็น) สำหรับสิ่งนี้ เพียงแค่แก้ไข
Rmano

trจะเป็นตัวเลือกแรกของฉันเช่นกัน ใช้งานได้ (ทางเลือกสำหรับ backticks และไม่มี POSIX bracket-classes):$( echo !! | tr '[A-Z]' '[a-z]')
belacqua

4

ที่นี่คำตอบโปรแกรมเมอร์เขียนมา .... ใช้หลาม:

`echo "print '!!'.lower()" | python`

หรือทับทิม:

`echo "print '!!'.downcase" | ruby`

หรือ Perl (อาจเป็นที่ชื่นชอบ):

`perl -e "print lc('!!');"`

หรือ PHP:

`php -r "print strtolower('!!');"`

หรือ Awk:

`echo "!!" | awk '{ print tolower($1) }'`

หรือ Sed:

`echo "!!" | sed 's/./\L&/g'`

หรือทุบตี:

str="!!" ; ${str,,}

หรือ zsh

echo "A='!!' ; \$A:l" | zsh

หรือ NodeJS หากคุณมี:

`echo "console.log('!!'.toLowerCase());" | node`

คุณสามารถใช้dd(แต่ฉันจะไม่ทำ!):

 `echo "!!" | dd  conv=lcase 2> /dev/null`

คุณสามารถสร้างสคริปต์ขนาดเล็กเพื่อทำงาน:

sudo bash -c 'cat << EOF > /usr/local/bin/lower
#!/usr/bin/python
import fileinput
print "".join(fileinput.input()).lower(),
EOF' && sudo chmod +x /usr/local/bin/lower

สิ่งที่คุณใช้เช่น:

`echo !! | lower`

1

และเป็นหนึ่งที่มีsed,

$(echo !! | sed 's/^\(.*\)$/\L\1/g')

ตัวอย่าง:

$ SUDO APT-GET UPDATE
SUDO: command not found
$ $(echo !! | sed 's/^\(.*\)$/\L\1/g')

เอาท์พุท:

$(echo SUDO APT-GET UPDATE | sed 's/^\(.*\)$/\L\1/g')
[sudo] password for avinash: 
0% [Waiting for headers] [Waiting for headers] [Waiting for headers] [Connectin^
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.