Како да користите .басхрц датотеку да бисте двоструко више урадили са половином притиска на тастере

У свом недавном посту о подешавању Убунту-а са Басх скриптама, кратко сам алудирао на магију .bashrc. Ово заправо није правдало, па ево кратког поста који нуди мало више детаља о томе шта Басх конфигурациона датотека може учинити.

Моја тренутна конфигурација изузетно побољшава мој ток посла и штеди ми више од 50% притиска тастера које бих морао да употријебим без ње! Погледајмо неке примере псеудонима, функција и брзих конфигурација који могу побољшати наш ток рада помажући нам да будемо ефикаснији са мање притиска на тастере.

Басх алиаси

Паметно написано .bashrcможе уштедети пуно притиска на тастере. То можемо искористити у дословном смислу користећи басх псеудониме или низове који се проширују на веће наредбе. Као индикативни пример, ево Басх псеудонима за копирање датотека у терминалу:

# 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"

Псеудоними добро дођу када желимо да избегнемо и куцање дугих наредби. Ево неколико које користим када радим са Питхон окружењима:

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

За даљу инспирацију о томе како Басх псеудоними могу уштедети време, топло препоручујем примере у овом чланку.

Басх функције

Једна лоша страна горњих алиаса је та што су прилично статични - увек ће се проширити на тачно декларисани текст. За псеудоним Басх који узима аргументе, треба да креирамо функцију. То можемо учинити овако:

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

Не могу да избројим колико сам пута откуцао cdи lsодмах затим да видим садржај директоријума у ​​којем се сада налазим. Када је ова функција постављена, све се догађа са само та два слова! Функција узима први аргумент, $1као место на које ће се променити директоријум, а затим штампа садржај тог директоријума у ​​лепо обликованим колонама са индикаторима типа датотеке. builtinДео је потребно да се басх да бисмо промијенили ове наредбе.

Басх функције су врло корисне и када је у питању преузимање или надоградња софтвера. Претходно сам сваких неколико недеља провео најмање неколико минута преузимајући нову проширену верзију статичког генератора веб локација Хуго, захваљујући њиховој изврсној учесталости испоруке. Уз функцију, морам само да пренесем верзију, а надоградња се дешава за неколико секунди.

# 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]Ознака једноставно узима све аргументе дате, замени своје место у функцији. Да бисмо покренули горњу функцију и преузели Хуго верзију 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 }

Или шта кажете на функцију која додаје удаљени изворни УРЛ за ГитЛаб у тренутно спремиште?

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

Са glab username, originпомоћу нашег usernameна ГитЛаб.цом можемо створити нови УРЛ за тренутно Гит спремиште . Пребацивање на нову удаљену УРЛ адресу аутоматски ствара ново приватно ГитЛаб спремиште, па је ово корисна пречица за стварање резервних копија!

Басх функције су заиста ограничене само могућностима скриптирања, којих практично има мало. Ако било шта радимо често, што захтева унос неколико линија у терминал, вероватно можемо створити Басх функцију за то!

Басх промпт

Поред садржаја директорија, корисно је видети и целу путању директорија у коме се налазимо. Басх упит може нам показати ову путању, заједно са осталим корисним информацијама попут наше тренутне Гит гране. Да бисмо га учинили читљивијим, можемо дефинисати боје за сваки део упита. Ево како можемо поставити упит да .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функцију дефинисану горе, која приказује тренутну Гит грану,
  • \$ ће приказати „$“ ако сте нормалан корисник или сте у нормалном корисничком режиму и „#“ ако сте роот.

Комплетна листа Басх секвенци за бег може нам помоћи да прикажемо много више битова информација, укључујући чак и време и датум! Басх упити су врло прилагодљиви и индивидуални, па их слободно подесите како год желите.

Ево неколико опција које стављају информације испред и по средини и могу нам помоћи да радимо ефикасније.

За одлагање оклевања

Корисничко име и тренутно време у секундама, у 24-часовном ХХ: ММ: СС формату:

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

За оне који увек воле да знају где су

Пуни пут до датотеке у засебном реду и корисничко име:

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

За минималисте

export PS1=">"
>

We can build many practical prompts with just the basic escape sequences; once we start to integrate functions with prompts, as in the Git branch example, things can get really complicated. Whether this amount of complication is an addition or a detriment to your productivity, only you can know for sure!

Many fancy Bash prompts are possible with programs readily available with a quick search. I’ve intentionally not provided samples here because, well, if you can tend to get as excited about this stuff as I can, it might be a couple hours before you get back to what you were doing before you started reading this post, and I just can’t have that on my conscience. ?

We’ve hopefully struck a nice balance now between time invested and usefulness gained from our Bash configuration file! I hope you use your newly-recovered keystroke capacity for good.