Az alias egy parancs rövidítése, amellyel könnyebben megjegyezhető. A shell-szkript egy parancssort tartalmazó szöveg, amely elkerüli a parancsok egyenkénti beírását.

Példa egy álnévre:

Íme néhány álnév és shell szkript, amelyeket nagyon gyakran használok. Bash/zsh kompatibilisek.

Alap szkriptek

"gr" a "grep -i" helyett

A leghasznosabb parancsikon, amit használtam,
5 betűvel kevesebb, de legalább millió billentyűleütést megspóroltam ;)

alias gr="grep -i"

os() függvény

Az "os" függvény segít nekünk az operációs rendszer nevét megadni - "OSX", "Linux", "MS Windows", "Egyéb OS" - Gyakran váltok Linux és MacO között, ezért rendszerekkel kompatibilis szkriptekre van szükségem. .

function os {
  case "$(uname -s)" in
Darwin)
     echo 'OSX'
     ;;
Linux)
     echo 'Linux'
     ;;
CYGWIN*|MINGW32*|MSYS*|MINGW*)
     echo 'MS Windows'
     ;;
*)
     echo 'Other OS'
     ;;
 esac
}

függvény clip_copy()

A clip_copy egy rendszerkompatibilis vágólapmásolat Linux/Mac Os rendszerhez.
A cikk későbbi részében sokszor használom ezt a funkciót.

Példa:

echo ‘test’ | clip_copy

Ezzel a 'teszt' karakterláncot a rendszer vágólapjára másolja.
Mac OS esetén telepíteni kell a `pbcopy' eszközt.
Linux felhasználóknak szükség lehet az autocutsel eszközre a CUT puffer és a rendszer vágólapjának szinkronizálásához: `autocutsel -villa & autocutsel -kiválasztás ELSŐDLEGES -villa`

function clip_copy {
  read text
  myos=$(os)
  if [[ $myos == "Linux" ]]
  then
    # tr will remove colors and new lines ^M
    echo $text | tr -d '[:cntrl:]' | xclip -selection clipboard
  else
    echo $text | tr -d '[:cntrl:]' | pbcopy
  fi
}

Git szkriptek

'menj' a 'git checkout' helyett

Ez az álnév valóban nyilvánvaló, de olyan sok programozót láttam, aki egész parancsokat ír be az egyszerű go helyett. Természetesen ez sok más git parancsra is vonatkozik, mint például a commit, push & pull.

alias go="git checkout"

a "git stash" és a "git unstash" parancsikon

alias stash="git stash -u"
alias unstash="git stash pop"

könnyen válthat git ágakat

az utoljára használt ágak megjelenítése a véglegesítés dátuma szerint rendezve. A „gbso” a „git branch sorted” rövidítése

function gbso {
 git for-each-ref — sort=-committerdate refs/heads/ — format=’%(refname:short)’ | head -n 30
}

Most itt van egy függvény, amit sokat használok: gob – a „go branch” rövidítése.
Ez megmutatja nekünk a legutóbb módosított ágak listáját (gbso függvény), és lehetővé teszi, hogy gyorsan átváltsunk erre az ágra.
Írja be az „1” értéket, hogy a lista első ágára váltson.

function gob {
 gbso | head -n 30 | nl
 echo ‘Which branch: ‘
 read branch_number
 branch_name=$(gbso | awk “NR==$branch_number” | tr -d ‘ ‘)
 git checkout $branch_name
}

Íme egy bemutató:

Kubernetes szkriptek

az összes telepített kontextus listájának lekérése

alias k_c="kubectl config get-contexts"

számozott listával ellátott kubernetes környezetek váltása

function k_uc {
  kubectl config get-contexts | nl
  echo 'Which context: '
  read action
context_name=$(kubectl config get-contexts | awk "NR==$action" | awk '{print $1}')
  kubectl config use-context $context_name
}

ez hasonló listát mutat, mint a gob script

az összes aktuális kontextus névterének megjelenítése

alias k_n="kubectl get namespace"

könnyen beléphet a hüvelybe

A k_p_enter kilistázza az aktuális névtér összes sorát, és lehetővé teszi a gyors elérést vagy egy fájl másolását onnan

function k_p_enter_ssh {
  echo $2
  echo "useful shortcuts:"
  echo "while :; do sleep 28; echo -en ' \\\b' >&2; done &"
  echo "bundle exec rails console -- --nomultiline"
  echo "bundle exec rails console -- --nomultiline" | clip_copy
  kubectl -n $1 exec -it $2 -- sh
}
function k_p_copy_file {
  echo $2
  filename=$3:t
  echo "kubectl -n $1 cp $2:$3 $filename"
  kubectl -n $1 cp $2:$3 $filename
}
function k_p_enter {
  kubectl -n $1 get pods | nl
  echo 'Use c {number} to copy file, eg. c 1'
  echo 'Which action: '
  read action
  action_prefix=$(echo $action | cut -d ' ' -f1)
if [[ $action_prefix == 'c' ]]
  then
    pod_number=$(echo $action | cut -d ' ' -f2)
    echo $pod_number
    pod_name=$(kubectl -n $1 get pods | awk "NR==$pod_number" | awk '{print $1}')
    echo 'Path to file from app directory, for example. config/routes.rb'
    read path
    k_p_copy_file $1 $pod_name $path
  else
    pod_name=$(kubectl -n $1 get pods | awk "NR==$action" | awk '{print $1}')
    k_p_enter_ssh $1 $pod_name
  fi
}

SSH

ssh-n keresztül csatlakozhat kedvenc szkriptjeihez

Telepítse kedvenc szkriptjeit egy távoli kiszolgálóra egy munkamenet időtartamára.

Töltse ki a `~/.bashrc_remote`-t kedvenc álneveivel és szkriptjeivel. Az ssh kapcsolaton automatikusan betöltődnek.

function sshs {
        ssh $@ "cat > /tmp/.bashrc_temp" < ~/.bashrc_remote
        ssh -t $@ "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

Fájlok kicsomagolása

fájl kibontása fájlkiterjesztés szerint

extract () {
    if [ -f $1 ] ; then
        case $1 in
            *.tar.bz2)        tar xjf $1        ;;
            *.tar.gz)         tar xzf $1        ;;
            *.bz2)            bunzip2 $1        ;;
            *.rar)            unrar x $1        ;;
            *.gz)             gunzip $1         ;;
            *.tar)            tar xf $1         ;;
            *.tbz2)           tar xjf $1        ;;
            *.tgz)            tar xzf $1        ;;
            *.zip)            unzip $1          ;;
            *.Z)              uncompress $1     ;;
            *)                echo "'$1' cannot be extracted via extract()" ;;
        esac
    else
        echo "'$1' is not a valid file"
    fi
}

Gyorsan másolja a fájl elérési útját a terminálról

Van egy nagyon hasznos Tmux bővítmény, a Tmux-Thumbs:



Az oldalon egy bemutató videó található.

Ez a beépülő modul meghatározott mintákat keres a terminál képernyőjén, például fájl útvonalakat vagy uuid karakterláncokat. Ezután a beépülő modul minden pozícióhoz hozzárendel egy ábécé betűjét – a felhasználó könnyen másolhatja ezeket a karakterláncokat a betűk beírásával.

Van egy hasonló bővítmény a Vim szerkesztőhöz: https://github.com/easymotion/vim-easymotion

A terminálszkriptek valóban sokkal könnyebbé tehetik az életet :)

Maksymilian Kołodziej