Я багато разів виконував команду з великими літерами (можливо, тому, що CapsLockбуло включено), і натискав, Enterперш ніж усвідомити це.
Як я можу виконати останню команду зі всіма літерами, перетвореними на малі літери?
Я багато разів виконував команду з великими літерами (можливо, тому, що CapsLockбуло включено), і натискав, Enterперш ніж усвідомити це.
Як я можу виконати останню команду зі всіма літерами, перетвореними на малі літери?
Відповіді:
Ви можете досягти цього, додавши наступну маленьку функцію (я називаю це ??
дуже простою, але ви можете змінити це як хочете) у свій .bashrc
файл:
?? () { "${@,,}"; }
Далі, коли ви запустите:
?? !!
остання команда буде запущена з усіх літер у малі літери.
!!
: це частина інструментів історії bash, зокрема, вона розширюється до останнього запуску команди . Так, наприклад, echo !!
буде роздруковано останню команду, запущену в цьому конкретному сеансі оболонки."${@,,}
: Конструкція ${foo,,}
перетворить вміст змінної, $foo
перетвореної на всі малі літери. $@
- це масив позиційних параметрів. При використанні всередині функції вона розширюється до параметрів, переданих цій функції.Отже, "${@,,}"
просто перетворимо все, що було передано функції, у малі регістри, а потім виконаємо її. Тому запуск ??
функції з !!
параметром перетворить останню команду в малі регістри та запустить її.
"!!"
.
??
перетворює свої аргументи в нижчі регістри та !!
автоматично переписує попередню команду в поточну команду (так ??
приймає як аргументуйте попередню команду).
`відлуння !! | tr '[: верх:]' '[: нижній:]' '
Ключ у `
цитатах (backticks) - який запускає висновок як команду.
tr
був би і моїм першим вибором. Також працює (альтернатива backticks і без $( echo !! | tr '[A-Z]' '[a-z]')
ось відповідь програмістів .... використовувати python:
`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,,}
Або зш
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`
І той 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^
!!:l
.