Son komutu tüm harfleri küçük harfe dönüştürerek çalıştır


15

Birçok kez tüm harfleri büyük harfle (belki de CapsLockaçıktı) bir komut çalıştırdım ve bunu Enterfark etmeden önce bastırdım .

Son komutu tüm harfleri küçük harfe dönüştürerek nasıl çalıştırabilirim?


Yazık ki zsh kullanmıyorsun. !!:l.
Kevin,

Yanıtlar:


19

Dosyanıza aşağıdaki küçük işlevi ekleyerek ( ??çok basit olarak adlandırıyorum, ancak bunu istediğiniz gibi değiştirebilirsiniz) yapabilirsiniz .bashrc:

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

Sonra, ne zaman çalışacaksınız:

?? !!

son komut küçük harflerle tüm harflerle çalıştırılır.

açıklama

  • !!: Bu, bash'ın geçmiş araçlarının bir parçasıdır, özellikle de son komut çalıştırmasına kadar genişler . Örneğin, echo !!bu özel kabuk oturumunda çalıştırılan son komutu yazdıracaktır.
  • "${@,,}: Yapı ${foo,,} ,$foo tüm küçük harflere dönüştürülen değişkenin içeriğini dönüştürür. $@konumsal parametreler dizisidir. Bir fonksiyonun içinde kullanıldığında, o fonksiyona iletilen parametrelere genişletilir.

Böylece, "${@,,}"işleve iletilen her şeyi küçük harfe dönüştürecek ve sonra çalıştıracaktır. Bu nedenle, ??işlevi !!parametre olarak çalıştırmak, son komutu küçük harfe dönüştürür ve çalıştırır.


7
Belki de bunun nasıl çalıştığına dair bir açıklama ekleyebilirsiniz. Yazma şeklin çok şifreli. Ayrıca, aslında böyle çalışmaz. Yazdığınız gibi, sadece PWD'niz boşsa doğru çalışır. Alıntı yapmanız gerekiyor "!!".
terdon

1
Şimdi @terdon Glenn sayesinde, her durumda çalışması gerekir ... Ve anlatmaya çok fazla şey yok: işlev ??lowercaes ve onun argümanları harfleri dönüştüren !!yeniden yazmış akım komutu otomatik olarak önceki komutu (böylece ??olarak alır önceki komutu değiştirir).
Radu Rădeanu

6
`yankı !! | tr '[: üst:]' '[: alt:]' '

Anahtar, `çıktıyı komut olarak çalıştıran (backticks) alıntılarda bulunur.


2
İşaretleme dili nedeniyle cevabın ilk versiyonunda görünmeyen backticks. Bunun için aşağıya (yorum yapmadan) oy vermeye gerek yok; sadece düzenleyin.
Rmano

trbenim de ilk tercihim olurdu. Ayrıca çalışır (backticks alternatifi ve POSIX braket sınıfları olmadan):$( echo !! | tr '[A-Z]' '[a-z]')
belacqua

4

İşte bir programcı cevap geliyor .... python kullanın:

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

Veya Ruby:

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

Veya Perl (muhtemelen benim favorim):

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

Veya PHP:

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

Veya Awk:

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

Veya Sed:

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

Veya Bash:

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

Veya zsh

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

Veya varsa NodeJS:

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

Ayrıca kullanabilirsiniz dd(ama ben olmaz!):

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

İşi yapmak için küçük bir komut dosyası da oluşturabilirsiniz:

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

Hangi şekilde kullanırsınız:

`echo !! | lower`

1

Ve olan sed,

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

Misal:

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

Çıktı:

$(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^
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.