Hogyan használhatja a .bashrc fájlt kétszer annyihoz a billentyűleütések felével

Az Ubuntu Bash szkriptekkel történő beállításáról szóló legutóbbi bejegyzésemben röviden utaltam a .bashrc. Ez valójában nem tette igazságossá, ezért itt egy gyors bejegyzés, amely egy kicsit részletesebben bemutatja, hogy a Bash konfigurációs fájl mit tehet.

A jelenlegi konfigurációm rendkívül javítja a munkafolyamatomat, és jóval több mint 50% -ot takarít meg a billentyűleütéseknek, amelyeket nélküle kellene alkalmaznom! Nézzünk meg néhány példát az álnevekre, függvényekre és azonnali konfigurációkra, amelyek javíthatják munkafolyamatunkat azáltal, hogy kevesebb billentyű megnyomásával hatékonyabbak lehetünk.

Bash álnevek

Az okosan megírva .bashrcrengeteg billentyűleütést menthet meg. Ezt szó szerinti értelemben kihasználhatjuk bash álnevek vagy nagyobb parancsokká bővülő húrok használatával. Indikatív példaként itt van egy Bash alias a fájlok másolásához a terminálon:

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

A aliasparancs meghatározza azt a karakterláncot, amelyet be fogunk írni, majd azt követi, hogy mire bővül ki. Felülírhatjuk a meglévő parancsokat, mint cpfent. Önmagában a cpparancs csak fájlokat másol, könyvtárakat nem, és némán sikerül. Ezzel alias, akkor nem kell emlékezni, hogy adja át a két zászló, se cdvagy lsa helyét a másolt fájl, hogy erősítse meg, hogy ott van! Most csak ez a két gombnyomás (az cés számára d) mindezt megteszi helyettünk.

Itt van még néhány .bashrcálnév a közös funkciójú zászlók átadására.

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

Az álnevek jól jönnek, ha el akarjuk kerülni a hosszú parancsok beírását is. Íme néhány, amit Python-környezeteknél használok:

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

A Bash álnevek időmegtakarításának további inspirálásához nagyon ajánlom a cikk példáit.

Bash funkciók

A fenti álnevek egyik hátránya, hogy meglehetősen statikusak - mindig pontosan a deklarált szövegig fognak kibővülni. Bash alias esetén, amely argumentumokat vesz fel, létre kell hoznunk egy függvényt. Ezt így tehetjük:

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

Nem kezdhetem el számlálni, hogy hányszor gépeltem be cd, majd lsazonnal utána láttam annak a könyvtárnak a tartalmát, ahol most vagyok. Ezzel a funkcióval a funkció csak azzal a két betűvel történik! A függvény az első argumentumot $1a könyvtár megváltoztatásának helyeként veszi fel, majd a könyvtár tartalmát szépen formázott oszlopokban, fájltípus-jelzőkkel nyomtatja ki. A builtinrész szükséges ahhoz, hogy a Bash engedélyezze, hogy felülírjuk ezt az alapértelmezett parancsot.

A Bash funkciók nagyon hasznosak a szoftverek letöltésében vagy frissítésében is. Korábban néhány hetente legalább néhány percet töltöttem a Hugo statikus webhelygenerátor új kiterjesztett verziójának letöltésével, köszönhetően a kiváló szállítási gyakoriságnak. Egy funkcióval csak a verziót kell átadnom, és a frissítés néhány másodperc alatt megtörténik.

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

A [email protected]jelölés egyszerűen felveszi az összes megadott argumentumot, helyettesítve a függvényben lévő helyét. A fenti függvény futtatásához és a Hugo 0.57.2 verzió letöltéséhez a parancsot használjuk gethugo 0.57.2.

Nekem is van Golanghoz:

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 }

Vagy mit szólnál egy olyan funkcióhoz, amely távoli eredet-URL-t ad hozzá a GitLab számára az aktuális tárhoz?

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

Ezzel a GitLab.com webhelyen glab usernamelétrehozhatunk egy új originURL-t a jelenlegi Git username-tárházhoz. Az új távoli URL-re való áthelyezés automatikusan létrehoz egy új privát GitLab-adattárat, így ez hasznos parancsikon a biztonsági mentések létrehozásához!

A Bash funkciókat valójában csak a szkriptelés lehetőségei korlátozzák, amelyeknek gyakorlatilag kevés a korlátja. Ha bármi olyat csinálunk gyakran, amihez néhány sort kell beírnunk egy terminálba, valószínűleg létrehozhatunk hozzá egy Bash függvényt!

Bash prompt

A könyvtár tartalma mellett hasznos megnézni a könyvtár teljes elérési útját is. A Bash parancs megmutatja nekünk ezt az utat, valamint egyéb hasznos információkat, például a jelenlegi Git-ágat. Az olvashatóság javítása érdekében meghatározhatunk színeket a prompt minden részéhez. .bashrcEnnek megvalósításához a következőképpen állíthatjuk be a felszólítást :

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

Eredmény:

~/github/myrepo (master) $

A színek elnevezése megkönnyíti annak azonosítását, hogy hol kezdődik és áll le az egyik szín, hol kezdődik a következő. A terminálunkban látott promptot a következő karakterlánc határozza meg export PS1, a prompt minden összetevőjével együtt egy escape szekvenciával. Bontjuk le ezt:

  • \w megjeleníti az aktuális munkakönyvtárat,
  • \$(gitBranch)meghívja a gitBranchfent definiált függvényt, amely megjeleníti az aktuális Git elágazást,
  • \$ „$” -ot jelenít meg, ha normál felhasználó vagy normál felhasználói módban van, és „#” -et, ha root vagy.

A Bash menekülési szekvenciák teljes listája segíthet abban, hogy még sok információ megjelenjen, beleértve az időt és a dátumot is! A Bash utasítások nagyon testreszabhatóak és egyediek, ezért nyugodtan állítsa be tetszés szerint.

Íme néhány lehetőség, amely előtérbe helyezi az információkat és segíthet a hatékonyabb munkában.

A halogatást elkerülő

Felhasználónév és aktuális idő másodpercekkel, 24 órás ÓÓ: HH: SS formátumban:

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

Azoknak, akik mindig szeretik tudni, hogy hol állnak

A teljes fájl elérési útja külön sorban, és felhasználónév:

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

A minimalista számára

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.