Quali cose utili si possono aggiungere al proprio .bashrc? [chiuso]


141

C'è qualcosa di cui non puoi vivere senza e renderà la mia vita molto più semplice? Eccone alcuni che uso ('spazio su disco' e 'cartelle' sono particolarmente utili).

# some more ls aliases
alias ll='ls -alh'
alias la='ls -A'
alias l='ls -CFlh'
alias woo='fortune'
alias lsd="ls -alF | grep /$"

# This is GOLD for finding out what is taking so much space on your drives!
alias diskspace="du -S | sort -n -r |more"

# Command line mplayer movie watching for the win.
alias mp="mplayer -fs"

# Show me the size (sorted) of only the folders in this directory
alias folders="find . -maxdepth 1 -type d -print | xargs du -sk | sort -rn"

# This will keep you sane when you're about to smash the keyboard again.
alias frak="fortune"

# This is where you put your hand rolled scripts (remember to chmod them)
PATH="$HOME/bin:$PATH"

3
Questo dovrebbe essere wiki della comunità
Toro,

1
Trasformato in wiki della comunità. Godere.
Gareth,

4
convogliato a più? Scommetto che saresti più felice con meno o meno -F
derobert

Tranne il fatto che esiste uno "smistamento" prima di più, poiché l'ordinamento ha bisogno dell'input completo, meno -F ti farebbe vedere l'ordinamento più velocemente e scommetto che è abbastanza veloce.
GreenKiwi,

1
Nel caso in cui qualcuno fosse interessato, esiste un servizio che ti consente di navigare, creare un elenco e generare i tuoi alias: alias.sh
Sam152

Risposte:


81

Ho una piccola sceneggiatura che estrae gli archivi, l'ho trovata da qualche parte in rete:

extract () {
   if [ -f $1 ] ; then
       case $1 in
           *.tar.bz2)   tar xvjf $1    ;;
           *.tar.gz)    tar xvzf $1    ;;
           *.bz2)       bunzip2 $1     ;;
           *.rar)       unrar x $1       ;;
           *.gz)        gunzip $1      ;;
           *.tar)       tar xvf $1     ;;
           *.tbz2)      tar xvjf $1    ;;
           *.tgz)       tar xvzf $1    ;;
           *.zip)       unzip $1       ;;
           *.Z)         uncompress $1  ;;
           *.7z)        7z x $1        ;;
           *)           echo "don't know how to extract '$1'..." ;;
       esac
   else
       echo "'$1' is not a valid file!"
   fi
 }

1
Bello. Ancora una volta, però, c'è l'argomento IDE / Vim per quanto riguarda conoscere i comandi dalla memoria. Fantastica sceneggiatura però. Sicuramente andando nei saluti .bashrc!
Gareth

19
C'è un comando linux bello e semplice chiamato "unp", l'Unpacker che fa questo e altro.
Sander Marechal,

Il comando ha una funzione mancante. Non può aprire correttamente il pacchetto 7z su boost.org/doc/libs/1_39_0/more/getting_started/… . Sai come risolvere il problema?
Léo Léopold Hertz

7
Le versioni più recenti di tar rilevano automaticamente il tipo di archivio, quindi possono estrarre tutti i formati supportati semplicemente "tar xvf".
Prof. Moriarty,

@Sander dtrx non è neanche male. Si assicura che l'archivio venga estratto nella propria sottodirectory.
Tobu,

39

Dal momento che utilizzo così tante macchine diverse, il mio .bashrcimposta sempre il prompt dei comandi per includere, tra le altre cose, il nome del server a cui sono attualmente connesso. In questo modo, quando ho tre livelli di telnet / ssh, non scrivo la cosa sbagliata nella finestra sbagliata. Fa davvero schifo rm -rf .nella finestra sbagliata! (Nota: a casa, telnet è disabilitato su tutte le macchine. Al lavoro, ssh non è sempre abilitato e non ho accesso root a molte macchine.)

Ho uno script ~/bin/setpromptche viene eseguito da my .bashrc, che contiene:

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

# Throw it all together 
PS1="${RESET}${YELLOW}\h${NORMAL} \`${SELECT}\` ${YELLOW}>${NORMAL} "

Questo script imposta il prompt sul nome host seguito da :)se l'ultimo comando ha avuto esito positivo e :(se l'ultimo comando ha avuto esito negativo.


$? il check è un'idea abbastanza carina, mi piace.
derobert,

6
Mostro anche lo stato nel mio prompt, ma mantengo il valore numerico e lo coloro di rosso se diverso da zero, altrimenti verde.
pag

Interessante ....
imapollo

25

Il colore per le pagine man in meno rende le pagine man un po 'più facili da leggere:

export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

Le pagine man colorate possono anche essere ottenute installando la maggior parte e utilizzandola come variabile env MANPAGER. Se si desidera utilizzare questo cercapersone non solo per l'uomo, utilizzare la variabile PAGER, in questo modo:

export PAGER="/usr/bin/most -s"

24

Niente più cd ../../../ .. ma fino a 4

Aumenta di molte directory quando il numero passa come argomento, se nessuno sale di 1 per impostazione predefinita (trovato in un collegamento in un commento in stackoverflow.com e modificato un po ')

up(){
  local d=""
  limit=$1
  for ((i=1 ; i <= limit ; i++))
    do
      d=$d/..
    done
  d=$(echo $d | sed 's/^\///')
  if [ -z "$d" ]; then
    d=..
  fi
  cd $d
}

Questa versione di up () sembra inutilmente complessa. Uso questa versione: up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. Puoi rimuovere la chiamata a 'pwd' se lo desideri ovviamente.
Matthew G,

Uso qualcosa del genere: # Alias ​​di navigazione della directoryalias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..'
Matt Kenefick,

19

Mi occupo di molte macchine diverse, quindi uno dei miei preferiti è l'alias per ogni macchina che devo frequentemente SSH per:

alias claudius="ssh dinomite@claudius"

È anche utile impostare tasti buoni .ssh/confige ssh per semplificare ulteriormente il passaggio da una macchina all'altra.

Un altro dei miei alias preferiti è quello di spostare le directory:

alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."

E alcuni per le variazioni comunemente usate di ls(e errori di battitura):

alias ll="ls -l"
alias lo="ls -o"
alias lh="ls -lh"
alias la="ls -la"
alias sl="ls"
alias l="ls"
alias s="ls"

La cronologia può essere molto utile, ma per impostazione predefinita sulla maggior parte delle distribuzioni la cronologia viene spazzata via da ogni shell in uscita e non ha molto a che fare con l'inizio. Mi piace avere 10.000 linee di storia:

export HISTFILESIZE=20000
export HISTSIZE=10000
shopt -s histappend
# Combine multiline commands into one in history
shopt -s cmdhist
# Ignore duplicates, ls without options and builtin commands
HISTCONTROL=ignoredups
export HISTIGNORE="&:ls:[bf]g:exit"

In questo modo, se so di aver fatto qualcosa prima ma non riesco a ricordare i dettagli, un rapido mi history | grep fooaiuterà a correre la mia memoria.

Mi sono spesso ritrovato awka eseguire il piping dell'output per ottenere una determinata colonna dell'output, come nel df -h | awk '{print $2}'trovare la dimensione di ciascuno dei miei dischi. Per facilitare questo, ho creato una funzione fawknel mio .bashrc:

function fawk {
    first="awk '{print "
    last="}'"
    cmd="${first}\$${1}${last}"
    eval $cmd
}

Ora posso eseguire il df -h|fawk 2che consente di risparmiare un bel po 'di battitura.

Se è necessario specificare un delimitatore ( ad esempio , awk -F:per /etc/passwd), questa funzione ovviamente non può gestirlo. La versione leggermente revisionata in questa sintesi può gestire awkargomenti arbitrari prima del numero del campo (ma richiede comunque input da stdin).


2
Uso anche i tasti ssh alias e ssh ... mi rende tutto così facile
Devin,

1
+1 per i suggerimenti per il controllo della cronologia.
Rene Saarsoo,

2
puoi mettere gli alias dei nomi host in .ssh / config con lo stesso effetto. In questo caso, aggiungi una voce "Host cloudius" con "username dinomite"
Sirex,

15

Bashrc crittografato con GPG

Sono sicuro che tutti noi abbiamo cose che vorremmo mettere nel nostro bashrc che non vogliamo che siano facilmente leggibili dai sudoers. La mia soluzione a questo è:

if [ -f ~/.bash_private.gpg ]; then
   eval "$(gpg --decrypt ~/.bash_private.gpg 2>/dev/null)"
fi

Ho un agente GPG che lo fa, quindi devo solo inserire la password della mia chiave privata una volta ogni poche ore. Devi avere ancora un po 'di fiducia negli utenti del sistema perché la tua variabile, le funzioni e gli alias che hai definito potrebbero essere estratti dalla RAM. Tuttavia, lo uso principalmente per il mio laptop. Se viene rubato, non voglio che qualcuno veda facilmente cose come:

alias MYsql='mysql -uadmin -psecret'
wglatest(){ wget -O https://admin:secret@server.com/latest; }

Cifrate anche la vostra storia in quel caso? Perché non crittografare la tua $ home
Rqomey il

@Rqomey, il punto è che non devo crittografare la mia storia poiché le mie password non vengono visualizzate nella mia .bash_history perché sono nascoste da alias o funzioni. In esso vedi cose come MYsql < garbagecollect.sqlinvecemysql -uadmin -psecret < garbagecollect.sql
Bruno Bronosky il


12

Li usavo dappertutto, ma poi mi sono reso conto che era meglio ricordare come eseguirli "manualmente" perché significava che avrei 1) compreso appieno cosa stava succedendo e 2) avrei avuto accesso a queste funzionalità anche se il mio .bashrc personalizzato non è stato installato.

L'unica cosa che uso alias in questi giorni è quella di ridurre la digitazione ripetitiva di righe molto lunghe (ad es. alias myhost='ssh -T user@my.remote.host screen -dAr')


2
Concordato riguardo alla memorizzazione di comandi utili lunghi. Trovo però che sto eseguendo 'diskspace' abbastanza spesso su server in fuga (cioè php si sta scaricando ovunque).
Gareth

sì, in realtà ho qualcosa di simile a quello (du / home / * --max-depth 1 | sort -n> /home/.sizes) corro di notte in modo da poter tenere d'occhio il consumo di spazio dei miei utenti sul grande macchina condivisa.
pjz,

1
È abbastanza facile distribuire la configurazione personalizzata sui sistemi che usi regolarmente, però.
Tobu,

Proprio come un seguito al tuo alias, questo è qualcosa che faccio sempre. Faccio sempre questo con l'IP anche se in caso di interruzione del DNS.
jwbensley,

9

I liner e i piccoli script là fuori potrebbero continuare all'infinito. Raccomando man bash e scrivere le cose da soli. Qualche buona roba corta su http://www.commandlinefu.com . Ecco alcune cose.

#use extra globing features. See man bash, search extglob.
shopt -s extglob
#include .files when globbing.
shopt -s dotglob
#When a glob expands to nothing, make it an empty string instead of the literal characters.
shopt -s nullglob
# fix spelling errors for cd, only in interactive shell
shopt -s cdspell
# vi mode
set -o vi

s() { # do sudo, or sudo the last command if no argument given
    if [[ $# == 0 ]]; then
        sudo $(history -p '!!')
    else
        sudo "$@"
    fi
}

prompt_command() {
    p=$PWD  # p is much easier to type in interactive shells
    # a special IFS should be limited to 1 liners or inside scripts.
    # Otherwise it only causes mistakes.
    unset IFS
}
PROMPT_COMMAND=prompt_command


# smart advanced completion, download from
# http://bash-completion.alioth.debian.org/
if [[ -f $HOME/local/bin/bash_completion ]]; then
    . $HOME/local/bin/bash_completion
fi


extract () { # extract files. Ignore files with improper extensions.
    local x
    ee() { # echo and execute
        echo "$@"
        $1 "$2"
    }
    for x in "$@"; do
        [[ -f $x ]] || continue
        case "$x" in
            *.tar.bz2 | *.tbz2 )    ee "tar xvjf" "$x"  ;;
            *.tar.gz | *.tgz ) ee "tar xvzf" "$x"   ;;
            *.bz2 )             ee "bunzip2" "$x"   ;;
            *.rar )             ee "unrar x" "$x"   ;;
            *.gz )              ee "gunzip" "$x"    ;;
            *.tar )             ee "tar xvf" "$x"   ;;
            *.zip )             ee "unzip" "$x"     ;;
            *.Z )               ee "uncompress" "$x" ;;
            *.7z )              ee "7z x" "$x"      ;;
        esac
    done
}

2
Mi piace il tuo history -ptrucco.
Tobu,

9

Un piccolo consiglio per Bash se sei un amministratore di sistema e lavori molto con i privilegi di root:

shopt -o noclobber

Ciò ti impedirà di distruggere accidentalmente il contenuto di un file già esistente se reindirizzi l'output (> nome file). Puoi sempre forzare la sovrascrittura con> | nomefile.


8

Ho il seguente nel mio bashrc

function __setprompt {
  local BLUE="\[\033[0;34m\]"
  local NO_COLOUR="\[\033[0m\]"
  local SSH_IP=`echo $SSH_CLIENT | awk '{ print $1 }'`
  local SSH2_IP=`echo $SSH2_CLIENT | awk '{ print $1 }'`
  if [ $SSH2_IP ] || [ $SSH_IP ] ; then
    local SSH_FLAG="@\h"
  fi
  PS1="$BLUE[\$(date +%H:%M)][\u$SSH_FLAG:\w]\\$ $NO_COLOUR"
  PS2="$BLUE>$NO_COLOUR "
  PS4='$BLUE+$NO_COLOUR '
}
__setprompt

Su una macchina locale sembra:

[17:57][user:~]$

ma su un telecomando (tramite ssh) è:

[17:57][user@machine:~]$

6

Ho avuto questo nel mio .bashrc per un po 'e l'ho trovato utile. Se stai entrando nella casella, viene automaticamente avviata la schermata quando accedi, in questo modo quando la connessione di rete viene interrotta o altro, non perdi tutto ciò che stavi facendo. Dovrebbe essere posizionato alla fine.

if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x  -a "${SSH_TTY:-x}" != x ]
then
STARTED_SCREEN=1 ; export STARTED_SCREEN
[ -d $HOME/lib/screen-logs ] || mkdir -p $HOME/lib/screen-logs

sleep 1
screen -U -RR && exit 0

echo "Screen failed! continuing with normal bash startup"
fi

Se imposti la shell di accesso in modo che sia schermata (e configuri ad es. Bash nel tuo .screenrc), ogni volta che accedi a SSH, screen proverà automaticamente a riconnettersi a schermate disconnesse. In caso contrario, creerà una nuova schermata.
Dan Udey,

@Dan Udey Non ho provato quello che mi hai suggerito, ma la bash che ho pubblicato avvierà lo schermo solo sugli accessi ssh che erano come impostazione dello schermo come la shell di accesso, lo avvierebbe anche sugli accessi locali. Quale forse quello che vuoi. Non è proprio quello che voglio. :-)
baudtack,

Se sei preoccupato per le disconnessioni, controlla mosh, lo uso sempre e lo consiglio vivamente: mosh.mit.edu
jwbensley

5

Di quanti alias fortunehai bisogno, comunque?

Mi piace creare un cddalias che mi porti ovunque io sia molto probabilmente al lavoro su quel server.

PATHla ridefinizione appartiene davvero .bash_profile, no .bashrc.

Su un server in cui uso abitualmente un ampio set di screens, il mio .bashrcavrà:

alias s1="screen -dr chaos1"
alias s2="screen -dr chaos2"
alias s3="screen -dr chaos3"
# ... and so on

(I messaggi screensono stati impostati con, ad esempio screen -U -S chaos1.)


2
@chaos "Di quanti alias di fortuna hai bisogno, comunque?". corteggia per la vittoria. frak (e ortografia alternativa) per fallire.
Gareth

Si prega di seguire questi passaggi. 1) Estendi il tuo PERCORSO nel tuo .bashrc. 2) Digita "bash". 3) Digita 'echo $ PATH'. 4) Digitare "bash". 5) Digita 'echo $ PATH'. 6) Dai un pugno in testa per ignorare e insultare le persone in modo ignorante perché sanno più delle migliori pratiche di amministratore di sistema di te.
caos,

Sono impressionato dal fatto che tu abbia una ragione leggermente valida, ma non mi darai un pugno in faccia. È facile ottenere shell non di accesso in cui il percorso non è stato già esteso. Ritengo che sia stupido, in origine l'ho letto che stavi cercando di dire che non dovresti impostare variabili importanti nel tuo .bashrc o qualcosa del genere.
Ian Kelling,

Forse qualcuno dovrebbe iniziare un "Devo impostare le mie variabili PATH nel .bashrc o .bash_profile"?
Gareth,

3
@Ian Kelling: Quello che sto effettivamente dicendo è che le operazioni che dovrebbero essere eseguite una volta per login appartengono a .bash_profile e le operazioni che dovrebbero essere eseguite una volta per istanza della shell appartengono a .bashrc.
caos,

5

Tra le altre cose, imposto alcune impostazioni predefinite per meno, impedisco la chiusura accidentale del mio terminale e abilito la navigazione in avanti attraverso la cronologia:

# ignore case, long prompt, exit if it fits on one screen, allow colors for ls and grep colors
export LESS="-iMFXR"

# must press ctrl-D 2+1 times to exit shell
export IGNOREEOF="2"

# allow ctrl-S for history navigation (with ctrl-R)
stty -ixon

+1 per ilexport IGNOREEOF="2"
serverhorror

5

Ho alcuni bit:

# stop the pc speaker ever annoying me :)
setterm -bfreq 0

# don't put duplicate lines in the history. See bash(1) for more options
HISTCONTROL=ignoredups
# ... and ignore same sucessive entries.
HISTCONTROL=ignoreboth

# Expand the history size
HISTFILESIZE=10000 
HISTSIZE=100

# commands with leading space do not get added to history
HISTCONTROL=ignorespace

# am I on the internet?
alias p4='ping 4.2.2.2 -c 4'

# pwsafe
alias pw='pwsafe -p'

# ls aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias lt='ls -laptr' #oldest first sort
alias labc='ls -lap' #alphabetical sort

# cd aliases
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

# cd into the old directory
alias bd='cd "$OLDPWD"'

# install a package and automatically respond yes to confirmation prompt
alias ins="sudo aptitude install"

# remove a package and its configuration files
alias remp="sudo aptitude purge"

# search for a package - apt-cache and aptitude search in different ways
# so have both
alias searchc="apt-cache search"
alias search="aptitude search"
alias show="aptitude show"

3
Le tue linee HISTCONTROL si sovrascrivono, poiché è solo una variabile shell. ignoreboth combina ignorespace e ignoredups.
Annika Backstrom,

4
Prova cd -invece di bd
ptman,

5

Coda tutti i log in / var / log

alias logs="find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e's/:$//g' | grep -v '[0-9]$' | xargs tail -f"


4

L'alias delle "cartelle" è fantastico! L'ho modificato leggermente in modo che le directory con spazi non causassero errori.

alias folders='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'

2
cartelle ordinate per utilizzo del disco, nice
dotjoe

3

Vorrei echeggiare il commento di @ pjz sulla conoscenza manuale delle cose piuttosto che sulla loro configurazione. Soprattutto se accedi a numerose macchine, come mi sembra sempre di fare.

Quindi uno che sicuramente conosco è set -o viperché conosco i comandi vi-editing in bash e non conosco quelli di emacs (inoltre, Ctrl + A interferisce con screen). Sulle mie scatole, l'ho inserito.bashrc

Trovo anche che devo includere export EDITOR=vimperché una serie di distro recenti passano automaticamente a nano che è più fastidioso per essere lanciato da un'utilità che ha bisogno che tu modifichi qualcosa, quando mi aspettavo vi. : - /

Modifico anche il mio prompt. Ho scoperto molto tempo fa che l'aggiunta dell'ultimo codice di errore è abbastanza utile che mi piace. E mi piace il percorso completo nel prompt. E anche il screennumero attuale . Ed è logico includere l'utente e il nome host correnti. Il mio prompt èPS1='\u@\h $PWD $WINDOW [$?] \$ '


\ w dovrebbe darti il ​​percorso completo (a meno che tu non sia nella gerarchia della tua directory home quando '/ home / me' diventa '~' per esempio :-)
dr-jan

È il bit "tranne per" che non uso \ w. :-)
staticsan

3

Fai controllare bash per vedere se la dimensione della finestra è cambiata (impedisce che la modifica della linea diventi strana se ridimensioni la finestra del tuo terminale)

shopt -s checkwinsize

Questo è il mio preferito Fa sì che bash si aggiunga alla storia invece di sovrascriverla . In genere quando si avvia bash, carica la cronologia in memoria e quando la si chiude la scrive. Questo significa che se carichi due shell, usa entrambe, quindi chiudi entrambe, quella che hai chiuso per ultimo sovrascrive tutte le modifiche.

Questo frammento fa sì che prima di tutto aggiunga solo le modifiche (invece di sovrascriverle con l'intero buffer), e quindi causando, dopo ogni comando, la scrittura delle modifiche. In effetti, ottieni un aggiornamento .bash_history dal vivo, quindi se avvii un nuovo terminale, hai tutti i comandi dalla cronologia delle altre sessioni in esecuzione.

shopt -s histappend
PROMPT_COMMAND='history -a'


3

Ecco le mine:

export HISTCONTROL=ignoredups
export HISTIGNORE="&:ls:bg:fg"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# shows you if you are in a chroot or in a git repository
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;30m\]\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]$(__git_ps1)\$ '


if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

# two handy single-letter aliases

alias u='ls -hltr'
alias e='du * -cs | sort -nr | head'
alias g='grep -C5 --color=auto'

# creates a temp dir and cds into it
alias td='pushd $(mktemp -d)'

# find <dir> <file name regexp> <file contents regexp>
function fing { find "$1" -name "$2" -exec grep -H "$3" "{}" \; }

# shows "git diff" across any project in any subdirectory
alias git-differ='for g in $(find . -name ".git"); do g=${g%%.git};printf "$g\t\t\t";pu $g >/dev/null && git diff |wc -l; p >/dev/null; done'

# does git house keeping across any project in any subdirectory
alias git-housekeep='for g in $(find . -name ".git"); do g=${g%%.git};echo $g;pu $g && git repack && git gc --auto && p;done'

# Debian update
alias apg='aptitude update && aptitude dist-upgrade && aptitude clean'

# Quick way to serve files in HTTP from the local dir
alias webs='python -m SimpleHTTPServer'

2

Questi sono i miei preferiti:

export HISTFILESIZE=1000000000
export HISTSIZE=1000000

Mi piace avere una cronologia da riga di comando che non dimentica mai.

Sfortunatamente, qualche tempo fa ho lanciato una shell da cron che non leggeva in qualche modo .bashrc e ho ridotto tutto a 500 righe, distruggendo nel corso degli anni. Quindi consiglio di andare in / etc / bashrc.


2

Ecco alcuni dei miei preferiti:

alias ls='ls -F --color=auto'
alias l='ls'
alias ll='ls -ahl'
alias ..='cd ..'
alias ...='cd ../..'
alias mv='mv -i'

mkcd() {
        if [ $# != 1 ]; then
                echo "Usage: mkcd <dir>"
        else
                mkdir -p $1 && cd $1
        fi
}

# Git related
alias gs='git status'
alias gc='git commit'
alias ga='git add'
alias gd='git diff'
alias gb='git branch'
alias gl='git log'
alias gsb='git show-branch'
alias gco='git checkout'
alias gg='git grep'
alias gk='gitk --all'
alias gr='git rebase'
alias gri='git rebase --interactive'
alias gcp='git cherry-pick'
alias grm='git rm'

2

Lo uso circa 20 volte al giorno per inserire nell'ultima directory modificata:

cl()
{
        last_dir="$(ls -Frt | grep '/$' | tail -n1)"
        if [ -d "$last_dir" ]; then
                cd "$last_dir"
        fi
}

Questi due mantengono segnalibri permanenti di directory usate spesso:

rd(){
    pwd > "$HOME/.lastdir_$1"
}

crd(){
        lastdir="$(cat "$HOME/.lastdir_$1")">/dev/null 2>&1
        if [ -d "$lastdir" ]; then
                cd "$lastdir"
        else
                echo "no existing directory stored in buffer $1">&2
        fi
}

2

Dall'automazione di Linux e Unix Administration di Kirk Bauer (ottimo libro!)

PS1='\n[\u@\h]: \w\n$?> '

La nuova riga all'inizio è mia, mi piace avere una linea chiara tra l'output precedente e il prompt. Il resto è:

\ u = nome utente

\ h = host

\ w = directory di lavoro

$? = ultimo codice di ritorno


1

Compilo manualmente un certo numero di cose in $ HOME / local, quindi ho questo piccolo frammento:

for prog in $HOME/local/*
do
    if [ -d "$prog/bin" ]; then
        export PATH=$prog/bin:$PATH
    fi
    if [ -d "$prog/include" ]; then
        export C_INCLUDE_PATH=$prog/include:$C_INCLUDE_PATH
    fi
    if [ -d "$prog/lib" ]; then
        export LD_LIBRARY_PATH=$prog/lib:$LD_LIBRARY_PATH
        export LIBRARY_PATH=$prog/lib:$LIBRARY_PATH
    fi
    if [ -d "$prog/man" ]; then
        export MANPATH=$prog/man:$MANPATH
    fi
    if [ -d "$prog/share/man" ]; then
        export MANPATH=$prog/share/man:$MANPATH
    fi
done

Ho anche il mio client IRC sul mio server in esecuzione sullo schermo, quindi ho questo (non una cosa .bashrc, ma comunque utile)

#!/usr/bin/env bash

RUNNING=`screen -ls | grep irc`
if [ "" = "$RUNNING" ]; then
   screen -S irc irssi
else
   screen -dr irc
fi

1

Uso il mio bashrc su numerose macchine, quindi ho questo piccolo frammento per assicurarmi che LS sia colorato. Questo lo risolverà su macchine OSX, forse anche * BSD se modifichi la linea uname.

if [ "$TERM" != "dumb" ]; then
    if [ `uname` == "Darwin" ]; then
       alias ls='ls -G'
    else
       eval "`dircolors -b`"
       alias ls='ls --color=auto'
    fi
fi

Inoltre, ho un comando per eseguire il backup di un file, utile se stai per cambiare un file di configurazione e vuoi fare una copia rapida in anticipo.

bu () { cp $1 ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup ; }

@Andrew: ho eseguito il tuo primo codice senza successo in OSX. Rompe le mie impostazioni del prompt.
Léo Léopold Hertz

Funziona bene qui (10.6.X)
Rev316,

1

Questo è uno dei miei preferiti:

alias ssh='if [ "$(ssh-add -l)" = "The agent has no identities." ]; then ssh-add; fi; /usr/bin/ssh "$@"'

Se ho dimenticato di eseguire l'autenticazione, mi consente di farlo senza dover sprecare la digitazione facendo ssh-add dopo la sessione ssh.


1

Un paio di quelli buoni

Rendi SSH completare automaticamente il nome host a cui sei iscritto (se è nella tua configurazione o cronologia)

complete -o default -o nospace -W "$(/usr/bin/env ruby -ne 'puts $_.split(/[,\s]+/)[1..-1].reject{|host| host.match(/\*|\?/)} if $_.match(/^\s*Host\s+/);' < $HOME/.ssh/config)" scp sftp ssh

Alcune utili impostazioni di completamento della bash

bind "set completion-ignore-case on" # note: bind used instead of sticking these in .inputrc
bind "set bell-style none" # no bell
bind "set show-all-if-ambiguous On" # show list automatically, without double tab

Alcuni utili per Mac OS X

alias nospotlight='sudo mdutil -a -i off'
alias cleardnscache='sudo killall -HUP mDNSResponder'
alias ldd='otool -L'
alias seq='jot - '
alias eject='drutil eject'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.