Wiele razy uruchomiłem polecenie z wielkimi literami (może dlatego, że CapsLockbyło włączone) i nacisnąłem, Enterzanim zdałem sobie z tego sprawę.
Jak uruchomić ostatnie polecenie, gdy wszystkie litery są przekształcone na małe litery?
Wiele razy uruchomiłem polecenie z wielkimi literami (może dlatego, że CapsLockbyło włączone) i nacisnąłem, Enterzanim zdałem sobie z tego sprawę.
Jak uruchomić ostatnie polecenie, gdy wszystkie litery są przekształcone na małe litery?
Odpowiedzi:
Możesz to osiągnąć, dodając ??
w swoim .bashrc
pliku następującą małą funkcję (nazywam to bardzo prostą, ale możesz to zmienić) :
?? () { "${@,,}"; }
Następnie, kiedy uruchomisz:
?? !!
ostatnie polecenie zostanie uruchomione ze wszystkimi literami na małe litery.
!!
: jest to część narzędzi historii bash, a konkretnie rozwija się do ostatniego uruchomienia polecenia . Na przykład echo !!
wydrukuje ostatnie polecenie uruchomione w tej konkretnej sesji powłoki."${@,,}
: Konstrukt ${foo,,}
skonwertuje zawartość zmiennej $foo
skonwertowanej na wszystkie małe litery. $@
to tablica parametrów pozycyjnych. Gdy jest używany wewnątrz funkcji, jest rozszerzany do parametrów przekazywanych do tej funkcji.Więc "${@,,}"
po prostu skonwertuje wszystko, co zostało przekazane do funkcji na małe litery, a następnie uruchom ją. Dlatego uruchomienie ??
funkcji z !!
parametrem spowoduje przekonwertowanie ostatniego polecenia na małe litery i uruchomienie go.
"!!"
.
??
konwertuje litery argumentów na niższe partie i !!
automatycznie ponownie zapisuje poprzednie polecenie w bieżącym poleceniu ( ??
przyjmuje więc jako argument poprzednie polecenie).
`echo !! | tr '[: upper:]' '[: lower:]' '
Klucz znajduje się w `
cudzysłowach (backticks) - które uruchamiają dane wyjściowe jako polecenie.
tr
byłby również moim pierwszym wyborem. Działa również (alternatywa dla backticksa i bez klas nawiasów POSIX):$( echo !! | tr '[A-Z]' '[a-z]')
nadchodzi odpowiedź programistów .... użyj python:
`echo "print '!!'.lower()" | python`
Lub Ruby:
`echo "print '!!'.downcase" | ruby`
Lub Perl (prawdopodobnie mój ulubiony):
`perl -e "print lc('!!');"`
Lub PHP:
`php -r "print strtolower('!!');"`
Lub Awk:
`echo "!!" | awk '{ print tolower($1) }'`
Lub Sed:
`echo "!!" | sed 's/./\L&/g'`
Lub Bash:
str="!!" ; ${str,,}
Lub zsh
echo "A='!!' ; \$A:l" | zsh
Lub NodeJS, jeśli go masz:
`echo "console.log('!!'.toLowerCase());" | node`
Możesz także użyć dd
(ale nie chciałbym!):
`echo "!!" | dd conv=lcase 2> /dev/null`
Możesz również utworzyć mały skrypt do wykonania zadania:
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
Którego używasz tak:
`echo !! | lower`
A jeden z sed
,
$(echo !! | sed 's/^\(.*\)$/\L\1/g')
Przykład:
$ SUDO APT-GET UPDATE
SUDO: command not found
$ $(echo !! | sed 's/^\(.*\)$/\L\1/g')
Wynik:
$(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^
!!:l
.