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?
command-line
bash
history
Radu Rădeanu
źródło
źródło
!!:l
.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.
Wyjaśnienie
!!
: jest to część narzędzi historii bash, a konkretnie rozwija się do ostatniego uruchomienia polecenia . Na przykładecho !!
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.źródło
"!!"
.??
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).Klucz znajduje się w
`
cudzysłowach (backticks) - które uruchamiają dane wyjściowe jako polecenie.źródło
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:
Lub Ruby:
Lub Perl (prawdopodobnie mój ulubiony):
Lub PHP:
Lub Awk:
Lub Sed:
Lub Bash:
Lub zsh
Lub NodeJS, jeśli go masz:
Możesz także użyć
dd
(ale nie chciałbym!):Możesz również utworzyć mały skrypt do wykonania zadania:
Którego używasz tak:
źródło
A jeden z
sed
,Przykład:
Wynik:
źródło