Як використовувати свій файл .bashrc, щоб зробити вдвічі більше з половиною натискань клавіш

У своєму недавньому дописі про налаштування Ubuntu зі сценаріями Bash я коротко натякнув на магію .bashrc. Це насправді не відповідало справедливості, тому ось короткий допис, який пропонує трохи більше деталей про те, що може зробити файл конфігурації Bash.

Моя поточна конфігурація значно покращує мій робочий процес і економить значно більше 50% натискань клавіш, які мені довелося б використовувати без цього! Давайте розглянемо кілька прикладів псевдонімів, функцій та швидких конфігурацій, які можуть покращити наш робочий процес, допомагаючи нам бути ефективнішими завдяки меншій кількості натискань клавіш.

Псевдоніми Bash

Грамотно написане .bashrcможе заощадити безліч натискань клавіш. Ми можемо скористатися цим у прямому сенсі, використовуючи псевдоніми bash або рядки, які розширюються до більших команд. Для орієнтовного прикладу, ось псевдонім Bash для копіювання файлів у терміналі:

# Always copy contents of directories (r)ecursively and explain (v) what was done alias cp="cp -rv"

aliasКоманда визначає рядок , яку ми вводимо, а потім , що цей рядок буде розширюватися. Ми можемо замінити існуючі команди, як cpзазначено вище. Сама по собі cpкоманда копіюватиме лише файли, а не каталоги, і мовчить успішно. З цим псевдонімом, ми не повинні пам'ятати , щоб передати ці два прапора, ні cdабо lsрозташування нашого скопійованого файлу , щоб підтвердити , що це там! Тепер лише ці два натискання на клавіші (для cі d) зроблять все це за нас.

Ось ще кілька .bashrcпсевдонімів для передачі прапорів із загальними функціями.

# List contents with colors for file types, (A)lmost all hidden files (without . and ..), in (C)olumns, with class indicators (F) alias ls="ls --color=auto -ACF" # List contents with colors for file types, (a)ll hidden entries (including . and ..), use (l)ong listing format, with class indicators (F) alias ll="ls --color=auto -alF" # Explain (v) what was done when moving a file alias mv="mv -v" # Create any non-existent (p)arent directories and explain (v) what was done alias mkdir="mkdir -pv" # Always try to (c)ontinue getting a partially-downloaded file alias wget="wget -c"

Псевдоніми стають в нагоді, коли ми теж хочемо уникати довгих команд. Ось кілька, якими я користуюся при роботі з середовищами Python:

alias pym="python3 manage.py" alias mkenv="python3 -m venv env" alias startenv="source env/bin/activate && which python3" alias stopenv="deactivate"

Для подальшого натхнення щодо способів псевдонімів Bash можна заощадити час, я настійно рекомендую приклади в цій статті.

Функції Bash

Недоліком вищезазначених псевдонімів є те, що вони досить статичні - вони завжди розширюватимуться до точно заявленого тексту. Для псевдоніма Bash, який бере аргументи, нам потрібно створити функцію. Ми можемо зробити це так:

# Show contents of the directory after changing to it function cd () { builtin cd "$1" ls -ACF }

Я не можу почати підраховувати, скільки разів я вводив текст, cdа потім lsвідразу після того, щоб побачити вміст каталогу, в якому я зараз перебуваю. Якщо налаштована ця функція, все відбувається лише з цими двома буквами! Функція приймає перший аргумент $1як місце для зміни каталогу, а потім друкує вміст цього каталогу у добре відформатованих стовпцях з індикаторами типу файлу. builtinЧастина необхідно отримати Bash , щоб дозволити нам перевизначити цю команду по замовчуванням.

Функції Bash дуже корисні, коли йдеться про завантаження або оновлення програмного забезпечення. Раніше я витрачав принаймні кілька хвилин кожні кілька тижнів на завантаження нової розширеної версії статичного генератора веб-сайтів Hugo, завдяки їх чудовій частоті доставки. За допомогою функції мені потрібно лише передати версію, і оновлення відбувається за кілька секунд.

# Hugo install or upgrade function gethugo () { wget -q -P tmp/ //github.com/gohugoio/hugo/releases/download/v"[email protected]"/hugo_extended_"[email protected]"_Linux-64bit.tar.gz tar xf tmp/hugo_extended_"[email protected]"_Linux-64bit.tar.gz -C tmp/ sudo mv -f tmp/hugo /usr/local/bin/ rm -rf tmp/ hugo version }

[email protected]Позначення просто бере всі аргументи , наведені, замінивши його місце в функції. Для запуску вищевказаної функції та завантаження Hugo версії 0.57.2 ми використовуємо команду gethugo 0.57.2.

У мене теж є для Голанга:

function getgolang () { sudo rm -rf /usr/local/go wget -q -P tmp/ //dl.google.com/go/go"[email protected]".linux-amd64.tar.gz sudo tar -C /usr/local -xzf tmp/go"[email protected]".linux-amd64.tar.gz rm -rf tmp/ go version }

Або як щодо функції, яка додає віддалену вихідну URL-адресу для GitLab до поточного сховища?

function glab () { git remote set-url origin --add [email protected]:"[email protected]"/"${PWD##*/}".git git remote -v }

За допомогою glab usernameми можемо створити нову originURL-адресу для поточного сховища Git за допомогою нашого usernameна GitLab.com. Натискання на нову віддалену URL-адресу автоматично створює нове приватне сховище GitLab, тому це корисний ярлик для створення резервних копій!

Функції Bash насправді обмежуються лише можливостями сценарію, обмежень яких практично немає. Якщо ми щось часто робимо, що вимагає введення декількох рядків у термінал, ми, можливо, можемо створити для нього функцію Bash!

Підказка Bash

Окрім вмісту каталогу, корисно також бачити повний шлях до каталогу, в якому ми знаходимося. Підказка Bash може показати нам цей шлях разом з іншою корисною інформацією, такою як наша поточна гілка Git. Щоб зробити його більш читабельним, ми можемо визначити кольори для кожної частини підказки. Ось як ми можемо налаштувати наш запит .bashrcдля цього:

# Colour codes are cumbersome, so let's name them txtcyn="\[\e[0;96m\]" # Cyan txtpur="\[\e[0;35m\]" # Purple txtwht="\[\e[0;37m\]" # White txtrst="\[\e[0m\]" # Text Reset # Which (C)olour for what part of the prompt? pathC="${txtcyn}" gitC="${txtpur}" pointerC="${txtwht}" normalC="${txtrst}" # Get the name of our branch and put parenthesis around it gitBranch()  sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'  # Build the prompt export PS1="${pathC}\w ${gitC}\$(gitBranch) ${pointerC}\$${normalC} "

Результат:

~/github/myrepo (master) $

Присвоєння імен кольорам допомагає легко визначити, де починається і зупиняється один колір, а де починається наступний. Підказка, яку ми бачимо в нашому терміналі, визначається рядком, наведеним нижче export PS1, з кожним компонентом підказки з послідовністю екрану. Давайте розберемо це:

  • \w відображає поточний робочий каталог,
  • \$(gitBranch)викликає gitBranchфункцію, визначену вище, яка відображає поточну гілку Git,
  • \$ відображатиме "$", якщо ви звичайний користувач або в звичайному режимі користувача, і "#", якщо ви root.

Повний список послідовностей втечі Bash може допомогти нам відобразити набагато більше бітів інформації, включаючи навіть час і дату! Підказки Bash є дуже настроюваними та індивідуальними, тому сміливо налаштовуйте їх як завгодно.

Ось декілька варіантів, які ставлять інформацію вперед і в центрі і можуть допомогти нам працювати ефективніше.

Для несвоєчасного зволікання

Ім'я користувача та поточний час із секундами, у цілодобовому HH: MM: SS формат:

export PS1="${userC}\u ${normalC}at \t >"
user at 09:35:55 >

Для тих, хто завжди любить знати, де вони перебувають

Повний шлях до файлу в окремому рядку та ім’я користувача:

export PS1="${pathC}\w${normalC}\n\u:"
~/github/myrepo user: 

Для мінімалістів

export PS1=">"
>

Ми можемо побудувати багато практичних підказок лише за допомогою основних послідовностей втечі; як тільки ми починаємо інтегрувати функції з підказками, як у прикладі гілки Git, все може стати дуже складним. Чи така кількість ускладнень є додатковим чи збитком для вашої продуктивності, тільки ви можете точно знати!

Багато вигадливих підказок Bash можливі завдяки програмам, доступним для швидкого пошуку. Я навмисно не надав тут зразки, бо, ну, якщо ви можете, як можна більше, захвилюватися цим, можливо, пройде пару годин, перш ніж ви повернетесь до того, що робили, перш ніж почати читати цю публікацію, і Я просто не можу цього мати на совісті. ?

Ми сподіваємось, ми досягли гарного балансу між вкладеним часом та корисністю, отриманою з нашого конфігураційного файлу Bash! Сподіваюся, ви використаєте свою нещодавно відновлену здатність натискання клавіш назавжди.