Jakie przydatne rzeczy można dodać do swojego .bashrc? [Zamknięte]

141

Czy jest coś, bez czego nie możesz żyć i znacznie ułatwi moje życie? Oto niektóre, których używam (szczególnie przydatne są „przestrzeń dyskowa” i „foldery”).

# 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"
gyaresu
źródło
3
Powinna to być wiki społeczności
Toro
1
Zamieniono w wiki społeczności. Cieszyć się.
Gareth,
4
skazany na więcej? Założę się, że byłbyś szczęśliwszy z mniej lub bardziej -F
derobert
Z wyjątkiem tego, że przedtem jest to „sortowanie”, ponieważ sortowanie wymaga pełnego wkładu, tym mniej -F po prostu pozwoli ci zobaczyć sortowanie szybciej, i założę się, że to dość cholernie szybko.
GreenKiwi
1
Na wypadek, gdyby ktoś był zainteresowany, istnieje usługa umożliwiająca przeglądanie, tworzenie listy i pozyskiwanie
Sam152

Odpowiedzi:

81

Mam mały skrypt, który wyodrębnia archiwa, znalazłem go gdzieś w sieci:

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
 }
Gert M.
źródło
1
Miły. Znów jest jednak argument IDE / Vim dotyczący znajomości poleceń z pamięci. Fantastyczny kawałek scenariusza. Zdecydowanie w .bashrc Cheers!
Gareth
19
Jest ładne i proste polecenie linux o nazwie „unp”, Unpacker, który robi to i wiele więcej.
Sander Marechal
W poleceniu brakuje jednej funkcji. Nie można poprawnie otworzyć pakietu 7z na boost.org/doc/libs/1_39_0/more/getting_started/… . Czy wiesz jak rozwiązać problem?
Léo Léopold Hertz
7
Nowsze wersje tar automatycznie wykrywają typ archiwum, więc można wyodrębnić wszystkie obsługiwane formaty po prostu „tar xvf”.
Prof. Moriarty,
@Sander dtrx też nie jest zły. Sprawia, że ​​archiwum wypakowuje do własnego podkatalogu.
Tobu,
39

Ponieważ używam tak wielu różnych maszyn, .bashrczawsze ustawiam wiersz polecenia, aby zawierał między innymi nazwę serwera, na którym jestem aktualnie zalogowany. W ten sposób, gdy mam trzy poziomy głębokości w telnet / ssh, nie wpisuję niewłaściwej rzeczy w niewłaściwym oknie. Naprawdę jest do bani rm -rf .w niewłaściwym oknie! (Uwaga: w domu telnet jest wyłączony na wszystkich komputerach. W pracy ssh nie zawsze jest włączony i nie mam dostępu root do wielu komputerów.)

Mam skrypt, ~/bin/setpromptktóry jest wykonywany przeze mnie .bashrc, który zawiera:

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

Ten skrypt ustawia monit o nazwę hosta, a następnie, :)jeśli ostatnie polecenie zakończyło się powodzeniem, a :(jeśli ostatnie polecenie nie powiodło się.

Eddie
źródło
$? czek to całkiem fajny pomysł, podoba mi się.
derobert
6
W moim monicie pokazuję również status, ale zachowuję wartość liczbową i koloruję ją na czerwono, jeśli niezerowa, w przeciwnym razie zielona.
pgs
Ciekawe ....
imapollo,
25

Kolor strony podręcznika w mniej powoduje, że strony są nieco łatwiejsze do odczytania:

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'

Kolorowe strony można również uzyskać, instalując większość i używając go jako zmiennej env MANPAGER. Jeśli chcesz używać tego pagera nie tylko dla man, użyj zmiennej PAGER, jak poniżej:

export PAGER="/usr/bin/most -s"
oyvindio
źródło
24

Nigdy więcej cd ../../../ .. ale w górę 4

Przechodzi w górę o wiele katalogów jako liczba przekazana jako argument, jeśli żaden domyślnie nie wzrasta o 1 (znaleziony w linku w komentarzu na stackoverflow.com i nieco zmodyfikowany)

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
}
Alberto Zaccagni
źródło
Ta wersja up () wydaje się niepotrzebnie złożona. Używam tej wersji: up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. Jeśli chcesz, możesz usunąć połączenie z „pwd”.
Matthew G
Używam czegoś takiego: # Aliasy nawigacji katalogualias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..'
Matt Kenefick
19

Mam do czynienia z wieloma różnymi komputerami, więc jednym z moich ulubionych są aliasy dla każdej maszyny, do której muszę często SSH:

alias claudius="ssh dinomite@claudius"

Przydatne jest również skonfigurowanie dobrego .ssh/configi ssh, aby jeszcze bardziej ułatwić przeskakiwanie między maszynami.

Kolejnym z moich ulubionych aliasów jest przenoszenie katalogów:

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

I niektóre z często używanych odmian ls(i literówek):

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"

Historia może być bardzo przydatna, ale domyślnie w większości dystrybucji twoja historia jest zdmuchiwana przez każdą wychodzącą powłokę i na początku nie zawiera wiele. Lubię mieć 10 000 linii historii:

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"

W ten sposób, jeśli wiem, że już coś zrobiłem, ale nie pamiętam szczegółów, szybkie history | grep foopomogłyby mi wspomnieć.

Często przepuszczałem dane wyjściowe awkw celu uzyskania określonej kolumny danych wyjściowych, np. W df -h | awk '{print $2}'celu znalezienia rozmiaru każdego z moich dysków. Aby to ułatwić, stworzyłem funkcję fawkw moim .bashrc:

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

Mogę teraz uruchomić, df -h|fawk 2co oszczędza sporo pisania.

Jeśli trzeba określić separator ( np , awk -F:za /etc/passwd), funkcja ta oczywiście nie może sobie z tym poradzić. Nieco zmodyfikowana wersja w tej liście może obsługiwać dowolne awkargumenty przed numerem pola (ale nadal wymaga danych wejściowych ze standardowego wejścia).

Drew Stephens
źródło
2
Używam również aliasu ssh i kluczy ssh ... to sprawia, że ​​każdy jest taki prosty
devin
1
+1 za wskazówki kontroli historii.
Rene Saarsoo
2
możesz umieścić aliasy nazw hostów w .ssh / config z tym samym efektem. W tym przypadku dodać wpis 'cloudius Host' z 'username dinomite'
Sirex
15

Bashrc zaszyfrowane przez GPG

Jestem pewien, że wszyscy mamy rzeczy, które chcielibyśmy umieścić w naszym bashrc, których nie chcemy, aby były łatwe do odczytania przez sudoers. Moje rozwiązanie tego problemu to:

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

Mam agenta GPG, który to sprawia, że ​​muszę wpisywać hasło klucza prywatnego tylko raz na kilka godzin. Nadal musisz mieć zaufanie do użytkowników systemu, ponieważ twoja zmienna, funkcje i aliasy, które zdefiniujesz, mogą zostać wyodrębnione z pamięci RAM. Jednak używam tego głównie do mojego laptopa. Jeśli zostanie skradziony, nie chcę, żeby ktoś tak łatwo widział:

alias MYsql='mysql -uadmin -psecret'
wglatest(){ wget -O https://admin:secret@server.com/latest; }
Richard Bronosky
źródło
Czy w takim przypadku szyfrujesz również swoją historię? Dlaczego nie zaszyfrować domu $
Rqomey
@Rqomey, chodzi o to, że nie muszę szyfrować mojej historii, ponieważ moje hasła nie pojawiają się w mojej .bash_history, ponieważ są ukryte przez aliasy lub funkcje. W nim można zobaczyć rzeczy, jak MYsql < garbagecollect.sqlzamiastmysql -uadmin -psecret < garbagecollect.sql
Bruno Bronosky
12

Ustawiałem je wszędzie, ale potem zdałem sobie sprawę, że lepiej było po prostu pamiętać, jak to zrobić „ręcznie”, ponieważ oznaczało to, że 1) w pełni rozumiem, co się dzieje i 2) mam dostęp do tych możliwości, nawet jeśli mój niestandardowy plik .bashrc nie został zainstalowany.

Jedyne, czego używam aliasy na te dni, to ograniczenie powtarzania pisania naprawdę długich linii (np. alias myhost='ssh -T [email protected] screen -dAr')

pjz
źródło
2
Zgodzono się na zapamiętywanie długich przydatnych poleceń. Uważam jednak, że dość często używam „przestrzeni dyskowej” na niekontrolowanych serwerach (tj. Php jest rdzennie w całym miejscu).
Gareth
tak, faktycznie mam coś podobnego do tego (du / home / * --max-depth 1 | sort -n> /home/.sizes) uruchamiane co noc, dzięki czemu mogę z grubsza kontrolować zużycie miejsca przez moich użytkowników na dużym wspólna maszyna.
pjz
1
Jednak wdrożenie niestandardowej konfiguracji w systemach, z których regularnie korzystasz, jest dość łatwe.
Tobu,
Jako kontynuacja twojego aliasu ssh, robię to cały czas. Zawsze robię to z adresem IP w przypadku awarii DNS.
jwbensley
9

Jedyne linijki i maleńkie skrypty mogą trwać wiecznie. Polecam man bash i pisanie rzeczy samemu. Kilka dobrych krótkich bashów na http://www.commandlinefu.com . Oto kilka rzeczy.

#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
}
Ian Kelling
źródło
2
Lubię twoją history -psztuczkę.
Tobu,
9

Mała wskazówka dla Basha, jeśli jesteś administratorem i dużo pracujesz z uprawnieniami roota:

shopt -o noclobber

Zapobiegnie to przypadkowemu zniszczeniu zawartości już istniejącego pliku, jeśli przekierujesz dane wyjściowe (> nazwa pliku). Zawsze możesz wymusić zastąpienie za pomocą> | filename.

Cyberdrow
źródło
8

Mam następujące 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

Na komputerze lokalnym wygląda to tak:

[17:57][user:~]$

ale na zdalnym (poprzez ssh) jest to:

[17:57][user@machine:~]$
Anders Rasmussen
źródło
6

Mam to w moim .bashrc od jakiegoś czasu i uważam, że było to pomocne. Jeśli logujesz się do skrzynki, ekran uruchamia się automatycznie po zalogowaniu, w ten sposób, gdy połączenie sieciowe zostanie przerwane lub cokolwiek, nie stracisz tego, co robiłeś. Powinien zostać umieszczony na końcu.

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
baudtack
źródło
Jeśli ustawisz powłokę logowania na screen (i skonfigurujesz np. Bash w .screenrc), to za każdym razem, gdy będziesz SSH, ekran automatycznie spróbuje ponownie połączyć się z odłączonymi ekranami. Jeśli to się nie powiedzie, utworzy się nowy ekran.
Dan Udey
@ Dan Udey Nie próbowałem tego, co sam zasugerowałem, ale napisane przeze mnie bash uruchomi ekran tylko przy logowaniach ssh, które były tak samo ustawione jak powłoka logowania, uruchomiłyby to również przy logowaniu lokalnym. Które może tego chcesz. Po prostu nie tego chcę. :-)
baudtack
Jeśli martwisz się rozłączeniami, sprawdź mosh, używam go cały czas i bardzo go polecam: mosh.mit.edu
jwbensley
5

W fortunekażdym razie, ile aliasów potrzebujesz?

Lubię tworzyć cddalias, który zabierze mnie tam, gdzie obecnie najprawdopodobniej będę pracował na tym serwerze.

PATHredefinicja naprawdę należy .bash_profile, nie .bashrc.

Na serwerze, na którym rutynowo używam dużego zestawu screens, moje .bashrcbędą mieć:

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

( screenS zostały skonfigurowane na przykład screen -U -S chaos1.)

chaos
źródło
2
@chaos „W każdym razie ile aliasów fortuny potrzebujesz?”. woo za wygraną. frak (i ​​alternatywne pisownia) na niepowodzenie.
Gareth
Wykonaj następujące kroki. 1) Rozszerz swoją ŚCIEŻKĘ w swoim .bashrc. 2) Wpisz „bash”. 3) Wpisz „echo $ PATH”. 4) Wpisz „bash”. 5) Wpisz „echo $ PATH”. 6) Uderz się w głowę za ignoranckie poniżanie i obrażanie ludzi, ponieważ oni wiedzą więcej o najlepszych praktykach sysadmin niż ty.
chaos
Jestem pod wrażeniem, że masz nieco uzasadniony powód, ale nie zamierzasz uderzyć się w twarz. Łatwo jest uzyskać powłoki niezalogowane, w których Twoja ścieżka nie została jeszcze rozszerzona. Cofam się, że to głupie, pierwotnie czytałem, że próbujesz powiedzieć, że nie powinieneś ustawiać ważnych zmiennych w swoim .bashrc czy coś takiego.
Ian Kelling
Być może ktoś powinien uruchomić „Czy powinienem ustawić moje zmienne PATH w .bashrc lub .bash_profile”?
Gareth
3
@Ian Kelling: Tak naprawdę mówię, że operacje, które należy wykonać raz na login należą do .bash_profile, a operacje, które należy wykonać raz na instancję powłoki, należą do .bashrc.
chaos
5

Między innymi ustawiłem niektóre wartości domyślne na mniej, zapobiegam przypadkowemu zamknięciu terminala i włączam nawigację do przodu w historii:

# 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
Dennis Williamson
źródło
+1 zaexport IGNOREEOF="2"
Serverhorror
5

Mam kilka bitów:

# 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"
Hamish Downer
źródło
3
Twoje linie HISTCONTROL zastępują się nawzajem, ponieważ jest to po prostu zmienna powłoki. ignoreboth łączy ignorowanie i ignorowanie.
Annika Backstrom
4
Spróbuj cd -zamiast bd
ptman
5

Ogonuj wszystkie logi w / 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"
hoberion
źródło
4

Aby mieć kolory dla wszystkich poleceń grep, takich jak grep, egrep i zgrep, mam następujące pliki .bashrc

export GREP_OPTIONS='--color=auto'
Léo Léopold Hertz 준영
źródło
4

Alias ​​„folderów” jest świetny! Zmodyfikowałem go nieco, aby katalogi ze spacjami nie powodowały błędów.

alias folders='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'
feniks8
źródło
2
foldery posortowane według użycia dysku, ładne
dotjoe
3

Chciałbym powtórzyć komentarz @ pjz na temat ręcznego poznawania rzeczy, zamiast ich konfigurowania. Zwłaszcza jeśli masz dostęp do wielu maszyn, jak zawsze.

Tak więc zdecydowanie wiem, set -o viponieważ znam polecenia edycji vi w bash i nie znam tych emacsowych (poza tym Ctrl + A przeszkadza screen). Włożyłem to na własne pudełka.bashrc

Uważam również, że muszę to uwzględnić, export EDITOR=vimponieważ kilka ostatnich dystrybucji domyślnie ustawia się na nano, co jest najbardziej denerwujące, że rzuca się w nie narzędzie, które wymaga od ciebie edycji, gdy spodziewałem się vi. : - /

Zmieniam również monit. Dawno temu przekonałem się, że dodanie ostatniego kodu błędu jest na tyle przydatne, że mi się podoba. I podoba mi się pełna nazwa ścieżki w wierszu polecenia. I obecny screennumer też. I ma sens podanie bieżącego użytkownika i nazwy hosta. Moje pytanie brzmi:PS1='\u@\h $PWD $WINDOW [$?] \$ '

statyka
źródło
\ w powinien dać ci pełną ścieżkę dostępu (chyba że jesteś w hierarchii katalogu domowego, gdy „/ home / me” staje się „~”, na przykład :-)
dr-jan
Jest to bit „z wyjątkiem”, którego nie używam. :-)
staticsan
3

Poproś o sprawdzenie, czy rozmiar okna się zmienił (zapobiega dziwnej edycji linii w przypadku zmiany rozmiaru okna terminala)

shopt -s checkwinsize

To jest moje ulubione. Powoduje, że bash dołącza się do historii zamiast ją zastępować . Zwykle po uruchomieniu bash wczytuje historię do pamięci, a po jej zamknięciu zapisuje ją. Oznacza to, że jeśli załadujesz dwie powłoki, użyj obu, a następnie zamknij obie, ta, którą zamknąłeś ostatnio, nadpisze wszystkie zmiany.

Ten fragment kodu powoduje, że najpierw tylko dołącza zmiany (zamiast zastępowania całego bufora), a następnie powoduje, że po każdym poleceniu zapisuje zmiany. W efekcie otrzymujesz aktualizację na bieżąco .bash_history, więc jeśli uruchomisz nowy terminal, masz wszystkie polecenia z historii innych uruchomionych sesji.

shopt -s histappend
PROMPT_COMMAND='history -a'
Dan Udey
źródło
3

Oto kopalnie:

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'
Federico
źródło
2

Oto moje ulubione:

export HISTFILESIZE=1000000000
export HISTSIZE=1000000

Lubię mieć historię wiersza poleceń, która nigdy nie zapomina.

Niestety, jakiś czas temu wystrzeliłem z crona powłokę, która jakoś nie czytała .bashrc i podzieliłem wszystko na 500 linii, niszcząc przez lata. Polecam więc przejść do / etc / bashrc.

skiphoppy
źródło
2

Oto kilka moich ulubionych:

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'
Tomek
źródło
2

Używam tego około 20 razy dziennie, aby cd do ostatnio zmienionego katalogu:

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

Te dwa prowadzą stałe zakładki często używanych katalogów:

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
}
gz34
źródło
2

Od Automatyzacji administracji Linuksem i Unixem autorstwa Kirka Bauera (świetna książka!)

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

Nowa linia na początku jest moja, lubię mieć wyraźną linię między poprzednim wyjściem a pytaniem. Reszta to:

\ u = nazwa użytkownika

\ h = host

\ w = katalog roboczy

$? = ostatni kod powrotu

Andrew H
źródło
1

Kompiluję wiele rzeczy ręcznie w $ HOME / local, więc mam ten mały fragment:

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

Mam również mojego klienta IRC na moim serwerze działającym na ekranie, więc mam to (nie jest to .bashrc, ale nadal jest przydatne)

#!/usr/bin/env bash

RUNNING=`screen -ls | grep irc`
if [ "" = "$RUNNING" ]; then
   screen -S irc irssi
else
   screen -dr irc
fi
Daniel Huckstep
źródło
1

Używam mojego bashrc na wielu maszynach, więc mam ten mały fragment, aby upewnić się, że LS jest zabarwiony. To naprawi to na maszynach OSX, może nawet * BSD, jeśli dostosujesz linię uname.

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

Mam też polecenie wykonania kopii zapasowej pliku, przydatne, jeśli chcesz zmienić plik konfiguracyjny i chcesz szybko wykonać kopię.

bu () { cp $1 ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup ; }
Andrew Williams
źródło
@Andrew: Pierwszy kod uruchomiłem bezskutecznie w OSX. Łamie moje ustawienia Monitowania.
Léo Léopold Hertz
Działa dobrze tutaj (10.6.X)
Rev316
1

To jedno z moich ulubionych:

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

Jeśli zapomniałem uwierzytelnić, pozwala mi to zrobić bez marnowania pisania na ssh-add po sesji ssh.

joshk0
źródło
1

Kilka dobrych

Ustaw, aby SSH automatycznie uzupełniał nazwę hosta, na którą ssh (jeśli jest w twojej konfiguracji lub historii)

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

Kilka przydatnych ustawień zakończenia 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

Niektóre przydatne dla systemu 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'
Lynxman
źródło