В этой статье мы собрали такие команды bash, о которых знают лишь некоторые – настоящие гуру консоли. Давайте разбираться.
Это не bash для новичков, но и не супер-секретные материалы. Возможно, вы уже слышали о некоторых из этих команд. Проверим?
Зачастую консольные скрипты используются как клей, для автоматизации простейших одноразовых заданий. В этой подборке представлены 10 “скрытых” функций bash, которые повысят вашу производительность и прокачают уровень владения консолью.
1.Вставьте последний параметр предыдущей строки
Начнем команды bash с простого. alt-. -
самая полезная комбинация: попробуйте и убедитесь в этом. По каким-то причинам мало кто ней не знает. Используйте ее, чтобы выбрать более старые параметры. Она просто незаменима если вы хотите сделать что-то другое с тем, что использовали недавно.
2. Продвинутые команды bash: работа после выхода из системы
Если вы хотите, чтобы процесс продолжался даже после выхода из системы, используйте это:
disown -h
Полезная встроенная функция. В отличие от nohup, вы можете использовать disown в уже запущенном процессе. Прекратите работу с помощью control-Z
, получите pid
из ps
(или используйте echo $!
), используйте bg
для отправки в фоновый режим, затем используйте disown
с флагом -h
. Не забудьте о работе в фоне, иначе все прекратится после выхода.
3. Почти все перечисленное в секции EXPANSION
В частности расширение параметра:
$ I=foobar $ echo ${I/oo/aa} #replacement faabar $ echo ${I:1:2} #substring oo $ echo ${I%bar} #trailing substitution foo $ echo ${I#foo} #leading substitution bar
4. Перезапуск
Команды bash также включают в себя перезапуск предыдущей команды:
sudo !!
5. Больше волшебных комбинаций:
Ctrl + r
начинает обратный инкрементный поиск по истории введенных команд. После того, как вы продолжите ввод, она выдаст последнюю команду, содержащую то, что вы ввели.Tab
закончит введенное слово, если оно однозначно.Tab Tab
выведет все возможные варианты конца введенного слова.Alt + *
вставит все возможные окончания, которые могут быть полезны, например, если вы только что ввели деструктивную команду с символами подстановки.
rm -r source/d*.c Alt + *
rm -r source/delete_me.c source/do_not_delete_me.c
Ctrl + Alt + e
выполняет alias, историю и расширение консоли в текущей строке. Иными словами текущая строка будет отображена так же, как если бы она была обработана консолью.
ls $HOME/tmp Ctrl Alt + e
ls -N --color=tty -T 0 /home/cramey
6. Возврат к истории команд и аргументов
Существует возможность выборочного доступа к введенным командам и аргументам с помощью оператора !
. Это очень полезно при работе с длинными путями
Проверить свои последние команды можно через history.
Вы можете использовать предыдущие команды с !
, где n индекс команды в history, отрицательные числа считаются в обратном порядке, начиная с последней команды в истории.
ls -l foo bar touch foo bar !-2
Вы можете использовать предыдущие аргументы с помощью!:, 0 это команда, >= 1 это аргументы.
ls -l foo touch !:2 cp !:1 bar
Вы можете сочетать обе, используя !:
touch foo bar ls -l !:1 !:2 rm !-2:1 !-2:2 !-2
Вы также можете использовать диапазон аргументов !:-
touch boo far ls -l !:1-2
Другие специальные модификаторы !
:
*
для всех аргументов
ls -l foo bar ls !*
^
для первого аргумента (!:1 == !^)
$
для последнего аргумента
ls -l foo bar cat !$ > /dev/null
7. Состояние скрипта
Использование -x
позволяет увидеть что происходит в скрипте:
bash -x script.sh
8. SECONDS
Каждый раз при ссылке на этот параметр отображается количество секунд прошедших с момента вызова консоли. Если SECONDS
было присвоено значение, то возвращаемое число будет состоять из секунд, прошедших со времени присвоения, и из числа, которое было присвоено.
SECONDS=0; sleep 5 ; echo "that took approximately $SECONDS seconds"
9. Генерирование переменной
Случайное генерирование специальной переменной:
if [[ $(($RANDOM % 6)) = 0 ]]
then echo "BANG"
else echo "Try again" fi
10. Регистр
Эта команда позволяет вводу перестать быть чувствительным к регистру. Это очень вам поможет во время быстрого набора директорий путей, особенно на Mac, где файловая система изначально не чувствительна к регистру. Например, можно поместить .inputrc
в мою домашнюю папку.
set completion-ignore-case on
Комментарии