Welche nützlichen Dinge kann man seinem .bashrc hinzufügen? [geschlossen]

141

Gibt es etwas, ohne das du nicht leben kannst und das mein Leben so viel einfacher machen wird? Hier sind einige, die ich benutze ('Speicherplatz' und 'Ordner' sind besonders praktisch).

# 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
quelle
3
Dies sollte Community-Wiki sein
Toro
1
Wurde zum Community-Wiki. Genießen.
Gareth
4
zu mehr geleitet? Ich wette, Sie wären glücklicher mit weniger oder weniger -F
derobert
Abgesehen davon, dass es dieses "Sortieren" vor dem Mehr gibt, da sort die volle Eingabe benötigt, lässt weniger -F die Sortierung nur schneller sehen, und ich wette, es ist ziemlich blöd.
GreenKiwi
1
Nur für den Fall, dass jemand interessiert ist, gibt es einen Dienst, mit dem Sie Ihre Aliase durchsuchen, eine Liste erstellen und als Quelle verwenden können: alias.sh
Sam152

Antworten:

81

Ich habe ein kleines Skript, das Archive extrahiert. Ich habe es irgendwo im Internet gefunden:

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
quelle
1
Nett. Auch hier gibt es jedoch das IDE / Vim-Argument, die Befehle aus dem Speicher zu kennen. Fantastisches Drehbuch. Auf jeden Fall in die .bashrc Prost!
Gareth
19
Es gibt einen netten und einfachen Linux-Befehl namens "unp", den Unpacker, der dies und mehr ausführt.
Sander Marechal
Der Befehl hat eine fehlende Funktion. Das 7z-Paket unter boost.org/doc/libs/1_39_0/more/getting_started/… kann nicht korrekt geöffnet werden. Wissen Sie, wie Sie das Problem lösen können?
Léo Léopold Hertz 준영
7
Neuere Versionen von tar erkennen den Archivtyp automatisch und können daher alle unterstützten Formate mit 'tar xvf' extrahieren.
Prof. Moriarty
@Sander dtrx ist auch nicht schlecht. Es stellt sicher, dass das Archiv in ein eigenes Unterverzeichnis extrahiert wird.
Tobu
39

Da ich so viele verschiedene Computer verwende, wird .bashrcdie Eingabeaufforderung immer so eingestellt, dass sie unter anderem den Namen des Servers enthält, bei dem ich gerade angemeldet bin. Auf diese Weise tippe ich nicht das Falsche in das falsche Fenster, wenn ich drei Ebenen tief in Telnet / SSH bin. Es nervt wirklich rm -rf .im falschen Fenster! (Hinweis: Zu Hause ist Telnet auf allen Computern deaktiviert. Bei der Arbeit ist ssh nicht immer aktiviert und ich habe keinen Root-Zugriff auf sehr viele Computer.)

Ich habe ein Skript ~/bin/setprompt, das von my ausgeführt wird und Folgendes .bashrcenthält:

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

Dieses Skript setzt die Eingabeaufforderung auf den Hostnamen, gefolgt von, :)wenn der letzte Befehl erfolgreich war und :(wenn der letzte Befehl fehlgeschlagen ist.

Eddie
quelle
Die $? Scheck ist eine ziemlich nette Idee, ich mag es.
Derobert
6
Ich zeige den Status auch in meiner Eingabeaufforderung an, behalte aber den numerischen Wert bei und färbe ihn rot, wenn er nicht Null ist, ansonsten grün.
Seiten
Interessant ....
imapollo
25

Farbe für Hilfeseiten in weniger erleichtert das Lesen der Hilfeseiten:

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'

Farbige Hilfeseiten erhalten Sie auch, indem Sie die meisten installieren und als MANPAGER-Umgebungsvariable verwenden. Wenn Sie diesen Pager nicht nur für den Menschen verwenden möchten, verwenden Sie die Variable PAGER wie folgt:

export PAGER="/usr/bin/most -s"
oyvindio
quelle
24

Keine CD mehr ../../../ .. aber bis 4

Erhöht die Anzahl der als Argument übergebenen Verzeichnisse um viele Verzeichnisse, wenn keine standardmäßig um 1 erhöht wird (in einem Link in einem Kommentar in stackoverflow.com gefunden und ein wenig geändert).

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
quelle
Diese Version von up () erscheint unnötig komplex. Ich benutze diese Version: up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. Sie können den Aufruf von 'pwd' entfernen, wenn Sie dies offensichtlich möchten.
Matthew G
Ich benutze so etwas: # Directory Navigation Aliasealias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..'
Matt Kenefick
19

Ich beschäftige mich mit vielen verschiedenen Maschinen, so dass einer meiner Favoriten Aliase für jede Maschine sind, für die ich häufig SSH ausführen muss, um:

alias claudius="ssh dinomite@claudius"

Es ist auch nützlich, einen guten .ssh/configund einen ssh-Schlüssel einzurichten , um das Wechseln zwischen Maschinen noch einfacher zu machen.

Ein anderer meiner Lieblingsaliasnamen ist das Verschieben von Verzeichnissen:

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

Und einige für häufig verwendete Variationen von ls(und Tippfehler):

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"

Verlauf kann sehr nützlich sein, aber standardmäßig wird Ihr Verlauf bei den meisten Distributionen von jeder Shell, die beendet wird, weggeblasen, und es hält zunächst nicht viel. Ich mag es, 10.000 Zeilen Geschichte zu haben:

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"

Wenn ich weiß, dass ich zuvor etwas getan habe, mich aber nicht an die Einzelheiten erinnern kann, history | grep foohilft mir ein kurzer Moment dabei, mein Gedächtnis zu verbessern.

Ich habe oft festgestellt, dass ich die Ausgabe awkdurchgeleitet habe, um eine bestimmte Spalte der Ausgabe zu erhalten, z. B. df -h | awk '{print $2}'um die Größe jeder meiner Festplatten zu ermitteln. Um dies zu vereinfachen, habe ich fawkin meinem .bashrc eine Funktion erstellt:

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

Ich kann jetzt laufen, df -h|fawk 2was ein gutes Stück Tipparbeit erspart.

Wenn Sie ein Trennzeichen angeben müssen ( zB , awk -F:für /etc/passwd), kann diese Funktion natürlich nicht damit umgehen. Die leicht überarbeitete Version in dieser Liste kann beliebige awkArgumente vor der Feldnummer verarbeiten (erfordert jedoch weiterhin die Eingabe von stdin).

Drew Stephens
quelle
2
Ich benutze auch den ssh-Alias ​​und die ssh-Schlüssel ... das macht alles so einfach
devin
1
+1 für die Tipps zur Verlaufskontrolle.
Rene Saarsoo
2
Sie können Hostnamen-Aliase in .ssh / config auf die gleiche Weise einfügen. In diesem Fall fügen Sie einen Eintrag 'Host cloudius' mit 'Benutzername dinomite'
Sirex
15

GPG-verschlüsselter bashrc

Ich bin sicher, wir haben alle Dinge, die wir gerne in unseren Bash-Code aufnehmen möchten und die für Sudoer nicht leicht lesbar sein sollen. Meine Lösung hierfür ist:

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

Ich habe einen GPG-Agenten, der es so macht, dass ich das Passwort meines privaten Schlüssels nur einmal alle paar Stunden eingeben muss. Sie müssen den Benutzern des Systems immer noch vertrauen, da die von Ihnen definierten Variablen, Funktionen und Aliase aus dem RAM extrahiert werden können. Ich benutze dies jedoch hauptsächlich für meinen Laptop. Wenn es gestohlen wird, möchte ich nicht, dass jemand leicht Dinge sieht wie:

alias MYsql='mysql -uadmin -psecret'
wglatest(){ wget -O https://admin:secret@server.com/latest; }
Richard Bronosky
quelle
Verschlüsseln Sie in diesem Fall auch Ihren Verlauf? Warum verschlüsseln Sie nicht Ihr $ home
Rqomey
@Rqomey, der springende Punkt ist, dass ich meinen Verlauf nicht verschlüsseln muss, da meine Passwörter in meinem .bash_history nicht angezeigt werden, weil sie durch Aliase oder Funktionen verborgen sind. Darin sehen Sie Dinge wie MYsql < garbagecollect.sqlstattmysql -uadmin -psecret < garbagecollect.sql
Bruno Bronosky
12

Früher habe ich diese überall eingerichtet, aber dann wurde mir klar, dass es besser ist, sich nur daran zu erinnern, wie man sie 'manuell' macht, weil dies bedeutet, dass ich 1) vollständig verstehe, was vor sich geht, und 2) Zugriff auf diese Funktionen habe, selbst wenn Mein benutzerdefiniertes .bashrc wurde nicht installiert.

Das einzige, was ich heutzutage als Alias ​​benutze, ist, das wiederholte Tippen von wirklich langen Zeilen zu reduzieren (z. B. alias myhost='ssh -T [email protected] screen -dAr').

pjz
quelle
2
Einig in Bezug auf lange nützliche Befehle auswendig zu lernen. Ich stelle jedoch fest, dass ich ziemlich oft 'diskspace' auf außer Kontrolle geratenen Servern laufen lasse (dh PHP stürzt überall ab).
Gareth
Ja, ich habe tatsächlich etwas Ähnliches (du / home / * --max-depth 1 | sort -n> /home/.sizes), das jeden Abend ausgeführt wird, damit ich den Platzverbrauch meiner Benutzer im Auge behalten kann geteilte Maschine.
pjz
1
Es ist jedoch einfach genug, Ihre benutzerdefinierte Konfiguration auf Systemen bereitzustellen, die Sie regelmäßig verwenden.
Tobu
Nur um dir zu folgen, ssh alias, das ist etwas, was ich die ganze Zeit mache. Ich mache das immer mit der IP, obwohl im Falle eines DNS-Ausfalls.
Jwbensley
9

Die Einzeiler und winzigen Skripte da draußen könnten für immer weitergehen. Ich empfehle man bash und schreibe Dinge selbst. Einige gute kurze Bash-Sachen unter http://www.commandlinefu.com . Hier sind ein paar Dinge.

#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
quelle
2
Ich mag deinen history -pTrick.
Tobu
9

Ein kleiner Tipp für Bash, wenn Sie ein Sysadmin sind und viel mit Root-Rechten arbeiten:

shopt -o noclobber

Dies verhindert, dass Sie versehentlich den Inhalt einer bereits vorhandenen Datei zerstören, wenn Sie die Ausgabe umleiten (> Dateiname). Sie können das Überschreiben immer mit> | Dateiname erzwingen.

Cyberdrow
quelle
8

Ich habe die folgenden in meinem Baschrott

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

Auf einem lokalen Rechner sieht es so aus:

[17:57][user:~]$

aber auf einer Fernbedienung (durch ssh) ist es:

[17:57][user@machine:~]$
Anders Rasmussen
quelle
6

Ich habe dies für eine Weile in meinem .bashrc gehabt und fand es hilfreich. Wenn Sie sich in die Box einschleichen, wird der Startbildschirm beim Anmelden automatisch angezeigt. Auf diese Weise verlieren Sie nichts, wenn Ihre Netzwerkverbindung unterbrochen wird oder was auch immer. Es sollte am Ende platziert werden.

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
quelle
Wenn Sie Ihre Anmeldeshell als Bildschirm festlegen (und z. B. Bash in Ihrem .screenrc konfigurieren), versucht der Bildschirm bei jedem SSH-Zugriff automatisch, die Verbindung zu nicht verbundenen Bildschirmen wiederherzustellen. Wenn dies fehlschlägt, wird ein neuer Bildschirm erstellt.
Dan Udey
@Dan Udey Ich habe nicht versucht, was Sie selbst vorgeschlagen haben, aber die Bash, die ich gepostet habe, startet den Bildschirm nur bei SSH-Anmeldungen, die als Einstellungsbildschirm wie Ihre Anmeldeshell fungierten, und startet ihn auch bei lokalen Anmeldungen. Welches vielleicht was du willst. Es ist einfach nicht was ich will. :-)
Baudtack
Wenn du dir Sorgen um Verbindungsabbrüche machst,
schau
5

Wie viele Aliase fortunebrauchen Sie überhaupt?

Ich mag es, einen cddAlias ​​zu erstellen, der mich dorthin führt, wo ich momentan am wahrscheinlichsten auf diesem Server arbeite.

PATHNeudefinition gehört wirklich dazu .bash_profile, nicht .bashrc.

Auf einem Server, auf dem ich routinemäßig eine große Menge von screens verwende, hat my .bashrc:

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

(Die screens wurden zum Beispiel mit eingerichtet screen -U -S chaos1.)

Chaos
quelle
2
@chaos "Wie viele Aliase zum Glück brauchst du überhaupt?". um den Sieg werben. frak (und alternative Schreibweisen) für fail.
Gareth
Bitte befolgen Sie diese Schritte. 1) Erweitern Sie Ihren PATH in Ihrem .bashrc. 2) Geben Sie 'bash' ein. 3) Geben Sie 'echo $ PATH' ein. 4) Geben Sie 'bash' ein. 5) Geben Sie 'echo $ PATH' ein. 6) Schlagen Sie sich selbst in den Kopf, weil Sie Menschen ignorant herabgestimmt und beleidigt haben, weil sie mehr über die besten Praktiken von Sysadmin wissen als Sie.
Chaos
Ich bin beeindruckt, dass Sie einen leicht berechtigten Grund haben, sich aber nicht ins Gesicht zu schlagen. Es ist einfach, nicht angemeldete Shells zu erhalten, bei denen Ihr Pfad noch nicht erweitert wurde. Ich nehme zurück, dass es dumm ist, ich habe es ursprünglich gelesen, dass Sie versucht haben zu sagen, dass Sie keine wichtigen Variablen in Ihrem .bashrc oder so setzen sollten.
Ian Kelling
Vielleicht sollte jemand ein "Soll ich meine PATH-Variablen im .bashrc oder .bash_profile setzen"?
Gareth
3
@ Ian Kelling: Eigentlich sage ich, dass Operationen, die einmal pro Login ausgeführt werden sollen, in .bash_profile gehören und Operationen, die einmal pro Shell-Instanziierung ausgeführt werden sollen, in .bashrc gehören.
Chaos
5

Unter anderem habe ich einige Standardeinstellungen für weniger festgelegt, das versehentliche Schließen des Terminals verhindert und die Vorwärtsnavigation durch den Verlauf aktiviert:

# 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
quelle
+1 für dieexport IGNOREEOF="2"
Serverhorror
5

Ich habe ein paar Kleinigkeiten:

# 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
quelle
3
Ihre HISTCONTROL-Zeilen überschreiben sich gegenseitig, da es sich nur um eine Shell-Variable handelt. Unwissenheit kombiniert Unwissenheit und Ignoriertheit.
Annika Backstrom
4
Versuchen Sie es cd -anstelle von bd
ptman
5

Schließen Sie alle Protokolle in / var / log ab

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
quelle
4

Um Farben für alle grep-Befehle wie grep, egrep und zgrep zu haben, habe ich Folgendes in meinem .bashrc

export GREP_OPTIONS='--color=auto'
Léo Léopold Hertz 준영
quelle
4

Der Alias ​​"Ordner" ist großartig! Ich habe es leicht modifiziert, damit Verzeichnisse mit Leerzeichen keine Fehler verursachen.

alias folders='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'
phoenix8
quelle
2
ordner
3

Ich würde @ pjzs Kommentar über das manuelle Erkennen von Dingen wiederholen, anstatt sie einzurichten. Besonders wenn Sie auf zahlreiche Maschinen zugreifen, wie ich es immer zu tun scheine.

Eine, die ich definitiv kenne, ist, set -o vidass ich die vi-Editing-Befehle in Bash kenne und die Emacs nicht kenne (außerdem stört Strg + A screen). Das habe ich in meine eigenen Kisten gesteckt.bashrc

Ich finde auch, dass ich export EDITOR=vimeinbeziehen muss, weil eine Reihe von Distributionen standardmäßig auf Nano eingestellt sind, was am ärgerlichsten ist, wenn ein Dienstprogramm Sie dazu auffordert, etwas zu bearbeiten, als ich mit vi gerechnet habe. : - /

Ich ändere auch meine Aufforderung. Ich habe vor langer, langer Zeit festgestellt, dass das Hinzufügen des letzten Fehlercodes gerade nützlich genug ist, damit es mir gefällt. Und ich mag den vollständigen Pfadnamen in der Eingabeaufforderung. Und die aktuelle screenNummer auch. Und es ist nur sinnvoll, den aktuellen Benutzer- und Hostnamen anzugeben. Meine Eingabeaufforderung lautetPS1='\u@\h $PWD $WINDOW [$?] \$ '

staticsan
quelle
\ w sollte Ihnen den vollständigen Pfadnamen geben (es sei denn, Sie befinden sich in Ihrer Home-Verzeichnis-Hierarchie, wenn '/ home / me' beispielsweise zu '~' wird :-)
dr-jan
Es ist das "außer" Bit, das ich nicht verwende. :-)
staticsan
3

Lassen Sie die Bash überprüfen, um festzustellen, ob sich die Fenstergröße geändert hat (verhindert, dass die Zeilenbearbeitung merkwürdig wird, wenn Sie die Größe Ihres Terminalfensters ändern).

shopt -s checkwinsize

Das ist mein Favorit. Bewirkt, dass Bash an den Verlauf angehängt wird , anstatt ihn zu überschreiben . Wenn Sie bash starten, wird normalerweise der Verlauf in den Speicher geladen, und wenn Sie ihn schließen, wird er ausgeschrieben. Wenn Sie also zwei Shells laden, verwenden Sie beide und schließen Sie beide. Die zuletzt geschlossene überschreibt alle Änderungen.

Dieses Snippet bewirkt, dass es zuerst nur Änderungen anfügt (anstatt mit dem gesamten Puffer zu überschreiben) und dann nach jedem Befehl Änderungen schreibt. Tatsächlich erhalten Sie eine Live-Aktualisierung von .bash_history. Wenn Sie also ein neues Terminal starten, haben Sie alle Befehle aus dem Verlauf Ihrer anderen laufenden Sitzungen.

shopt -s histappend
PROMPT_COMMAND='history -a'
Dan Udey
quelle
3

Hier sind Minen:

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
quelle
2

Das sind meine Favoriten:

export HISTFILESIZE=1000000000
export HISTSIZE=1000000

Ich mag es, einen Befehlszeilenverlauf zu haben, der niemals vergisst.

Unglücklicherweise habe ich vor einiger Zeit eine Shell von cron gestartet, die .bashrc nicht gelesen hat, und alles auf 500 Zeilen heruntergeschnitten, was die Geschichte von über einem Jahr zerstört hat. Also empfehle ich diese in / etc / bashrc.

Skiphoppy
quelle
2

Hier sind einige meiner Favoriten:

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'
Tom
quelle
2

Ich benutze dies ungefähr 20 Mal am Tag, um in das zuletzt geänderte Verzeichnis zu cden:

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

Diese beiden enthalten permanente Lesezeichen für häufig verwendete Verzeichnisse:

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
quelle
2

Von der Automatisierung der Linux- und Unix-Administration durch Kirk Bauer (tolles Buch!)

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

Die neue Zeile am Anfang ist meine, ich möchte eine klare Linie zwischen der vorherigen Ausgabe und der Eingabeaufforderung haben. Der Rest ist:

\ u = Benutzername

\ h = Host

\ w = Arbeitsverzeichnis

$? = letzter Rückkehrcode

Andrew H
quelle
1

Ich kompiliere eine Reihe von Dingen manuell in $ HOME / local, so dass ich diesen kleinen Ausschnitt habe:

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

Ich habe auch meinen IRC-Client auf meinem Server, der auf dem Bildschirm ausgeführt wird.

#!/usr/bin/env bash

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

Ich benutze meinen bashrc auf zahlreichen Maschinen, deshalb habe ich diesen kleinen Ausschnitt, um sicherzustellen, dass LS farbig ist. Dies behebt es auf OSX-Rechnern, möglicherweise sogar * BSD, wenn Sie die uname-Zeile anpassen.

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

Außerdem habe ich einen Befehl zum Sichern einer Datei, der nützlich ist, wenn Sie eine Konfigurationsdatei ändern und vorher eine schnelle Kopie erstellen möchten.

bu () { cp $1 ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup ; }
Andrew Williams
quelle
@ Andrew: Ich habe deinen ersten Code in OSX erfolglos ausgeführt. Es bricht meine Prompt-Einstellungen.
Léo Léopold Hertz 준영
Funktioniert gut hier (10.6.X)
Rev316
1

Dies ist einer meiner Favoriten:

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

Wenn ich vergessen habe, mich zu authentifizieren, kann ich dies tun, ohne nach der ssh-Sitzung meine Eingabe mit ssh-add verschwenden zu müssen .

joshk0
quelle
1

Ein paar gute

Vervollständige den Hostnamen, an den du ssh sendest, automatisch durch SSH (wenn er in deiner Konfiguration oder im Verlauf enthalten ist)

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

Einige nützliche Einstellungen für die Bash-Vervollständigung

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

Einige nützliche für 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
quelle