Как да използвате вашия .bashrc файл, за да направите два пъти повече с половината клавиши

В скорошната си публикация за настройка на Ubuntu с Bash скриптове, аз накратко споменах магията на .bashrc. Това всъщност не го оправда, така че ето бърза публикация, която предлага малко повече подробности за това какво може да направи конфигурационният файл на Bash.

Моята текуща конфигурация значително подобрява работния ми процес и ми спестява над 50% от натисканията на клавишите, които бих трябвал да използвам без него! Нека разгледаме някои примери за псевдоними, функции и бързи конфигурации, които могат да подобрят работния ни процес, като ни помогнат да бъдем по-ефективни с по-малко натискания на клавиши.

Баш псевдоними

Умно написаното .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, който взема аргументи, ще трябва да създадем функция. Можем да направим това така:

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

Не мога да започна да преценявам колко пъти съм въвел cdи lsведнага след това да видя съдържанието на директорията, в която се намирам. С настройката на тази функция всичко се случва само с тези две букви! Функцията приема първия аргумент $1като местоположение, на което да се промени директорията, след което отпечатва съдържанието на тази директория в добре форматирани колони с индикатори за тип файл. Най builtin-хубавото е необходимо, за да получите Баш за да ни позволи да се преодолеят тази команда по подразбиране.

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.

Имам и за Golang:

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 escape последователностите може да ни помогне да покажем много повече битове информация, включително дори часа и датата! Bash подканите са много персонализирани и индивидуални, така че не се колебайте да го настроите по какъвто начин искате.

Ето няколко опции, които поставят информацията отпред и в центъра и могат да ни помогнат да работим по-ефективно.

За отлагане на отлагането

Потребителско име и текущо време със секунди, в 24-часов 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! Надявам се да използвате окончателно възстановения си капацитет за натискане на клавиши.