Quelles choses utiles peut-on ajouter à son .bashrc? [fermé]

141

Y a-t-il quelque chose que vous ne pouvez pas vivre sans et qui me facilitera tellement la vie? Voici quelques-uns que j'utilise ('' espace disque '' et 'les dossiers' sont particulièrement pratiques).

# 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
la source
3
Cela devrait être un wiki de communauté
Toro
1
Devenu wiki de la communauté. Prendre plaisir.
Gareth
4
canalisé à plus? Je parie que vous seriez plus heureux avec moins ou moins -F
derobert
Sauf qu'il y a ce "tri" avant le plus, puisque le tri nécessite une entrée complète, le moins -F vous permettrait simplement de voir le tri plus rapidement, et je parie que c'est assez rapide.
GreenKiwi
1
Juste au cas où quiconque serait intéressé, il existe un service qui vous permet de naviguer, de construire une liste et de trouver
Sam152

Réponses:

81

J'ai un petit script qui extrait des archives, je l'ai trouvé quelque part sur le net:

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
la source
1
Agréable. Encore une fois cependant, il y a cet argument IDE / Vim concernant la connaissance des commandes en mémoire. Un peu de script fantastique cependant. Vraiment aller dans le .bashrc Cheers!
Gareth
19
Il existe une commande simple et agréable appelée "unp", le Unpacker qui fait cela et plus encore.
Sander Marechal
La commande a une fonctionnalité manquante. Il ne peut pas ouvrir le paquet 7z à l' adresse boost.org/doc/libs/1_39_0/more/getting_started/… correctement. Savez-vous comment résoudre le problème?
Léo Léopold Hertz
7
Les nouvelles versions de tar détectent automatiquement le type d'archive et peuvent donc extraire tous les formats pris en charge en utilisant simplement «tar xvf».
Prof. Moriarty le
@Sander Dtrx n'est pas mauvais à cela non plus. Il s'assure que l'archive extrait dans son propre sous-répertoire.
Tobu
39

Étant donné que j'utilise autant de machines différentes, my .bashrcconfigure toujours l'invite de commande pour inclure, entre autres choses, le nom du serveur auquel je suis actuellement connecté. De cette façon, quand j'ai trois niveaux de profondeur dans telnet / ssh, je ne tape pas la mauvaise chose dans la mauvaise fenêtre. Ça craint vraiment rm -rf .dans la mauvaise fenêtre! (Remarque: à la maison, telnet est désactivé sur toutes les machines. Au travail, ssh n'est pas toujours activé et je n'ai pas accès root à de très nombreuses machines.)

J'ai un script ~/bin/setpromptqui est exécuté par my .bashrcqui contient:

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

Ce script définit l'invite sur le nom d'hôte suivi de :)si la dernière commande a abouti et :(si la dernière commande a échoué.

Eddie
la source
Le $? check est une bonne idée, je l'aime bien.
derobert
6
Je montre également le statut dans mon invite, mais je garde la valeur numérique et le colore en rouge s'il est différent de zéro, sinon vert.
pgs
Intéressant ....
imapollo
25

La couleur des pages de manuel en moins facilite la lecture des pages de manuel:

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'

Des pages de manuel colorées peuvent également être obtenues en installant most et en l’utilisant comme variable env. MANPAGER. Si vous voulez utiliser ce téléavertisseur non seulement pour l'homme, utilisez la variable PAGER, comme ceci:

export PAGER="/usr/bin/most -s"
jeu
la source
24

Plus de cd ../../../ .. mais en hausse de 4

Monte plusieurs dires en tant que nombre passé en argument, si aucun ne monte de 1 par défaut (trouvé dans un lien dans un commentaire dans stackoverflow.com et modifié un peu)

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
la source
Cette version de up () semble inutilement complexe. J'utilise cette version: up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. Vous pouvez supprimer l'appel de 'pwd' si vous le souhaitez.
Matthew G
J'utilise quelque chose comme ceci: # Alias ​​de navigation dans les répertoiresalias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..'
Matt Kenefick
19

Je traite avec beaucoup de machines différentes, donc un de mes favoris est les alias pour chaque machine que je dois fréquemment SSH pour:

alias claudius="ssh dinomite@claudius"

Il est également utile de configurer une bonne clé.ssh/config et une clé ssh pour faciliter encore plus le saut parmi les machines.

Un autre de mes alias préférés concerne les répertoires suivants:

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

Et quelques-unes des variantes ls(et des fautes de frappe) couramment utilisées :

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"

L’historique peut être très utile, mais par défaut sur la plupart des distributions, votre historique est époustouflé par la sortie de chaque shell et il n’en reste pas beaucoup. J'aime avoir 10 000 lignes d'histoire:

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"

De cette façon, si je sais que j'ai déjà fait quelque chose mais que je ne me souviens pas des détails, un petit coup de history | grep foopouce aidera à rafraîchir ma mémoire.

Je me suis souvent retrouvé en train de passer awken sortie pour obtenir une certaine colonne de sortie, par exemple df -h | awk '{print $2}'pour trouver la taille de chacun de mes disques. Pour faciliter ceci, j'ai créé une fonction fawkdans mon .bashrc:

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

Je peux maintenant courir, df -h|fawk 2ce qui économise un peu de frappe.

Si vous devez spécifier un délimiteur ( par exemple , awk -F:pour /etc/passwd), cette fonction ne peut évidemment pas gérer cela. La version légèrement remaniée de cette liste peut gérer des awkarguments arbitraires avant le numéro de champ (mais requiert toujours une entrée de stdin).

Drew Stephens
la source
2
J'utilise aussi les clés ssh alias et ssh ... tout est si simple
devin
1
+1 pour les astuces de contrôle de l'historique.
Rene Saarsoo Le
2
vous pouvez mettre les alias de nom d’hôte dans .ssh / config dans le même sens. Dans ce cas, ajoutez une entrée "Host cloudius" avec "nom d'utilisateur dinomite"
Sirex
15

Bashrc crypté par GPG

Je suis sûr que nous avons tous des choses que nous aimerions mettre dans nos bases et que nous ne voulons pas que les sudoers puissent les lire facilement. Ma solution à ceci est:

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

J'ai un agent GPG qui le fait, donc je n'ai qu'à entrer le mot de passe de ma clé privée toutes les quelques heures. Vous devez toujours faire confiance aux utilisateurs du système car vos variables, fonctions et alias que vous définissez peuvent être extraits de la RAM. Cependant, je l'utilise principalement pour mon ordinateur portable. En cas de vol, je ne veux pas que quelqu'un voie facilement des choses comme:

alias MYsql='mysql -uadmin -psecret'
wglatest(){ wget -O https://admin:secret@server.com/latest; }
Richard Bronosky
la source
Cryptez-vous également votre historique dans ce cas? Pourquoi ne pas crypter votre $ home
Rqomey
@Rqomey, le fait est que je n'ai pas à chiffrer mon historique car mes mots de passe n'apparaissent pas dans mon .bash_history car ils sont masqués par des alias ou des fonctions. On y voit des choses comme à la MYsql < garbagecollect.sqlplace demysql -uadmin -psecret < garbagecollect.sql
Bruno Bronosky
12

J'avais l'habitude de les installer un peu partout mais je me suis ensuite rendu compte qu'il était préférable de se rappeler simplement comment les faire 'manuellement' car cela signifiait que je 1) comprenais parfaitement ce qui se passait et 2) j'avais accès à ces fonctionnalités même si mon .bashrc personnalisé n'a pas été installé.

La seule chose que j'utilise avec des alias ces jours-ci est de réduire le typage répétitif de très longues lignes (par exemple alias myhost='ssh -T [email protected] screen -dAr') .

pjz
la source
2
D'accord sur la mémorisation de longues commandes utiles. Je trouve cependant que je suis en train de lancer '' espace disque '' assez souvent sur des serveurs en fugue (ie, php est un coredumping partout).
Gareth
ouais, j'ai en fait quelque chose de semblable à ça (du / home / * --max-depth 1 | sort -n> /home/.sizes) afin de pouvoir surveiller de près la consommation d'espace de mes utilisateurs machine partagée.
pjz
1
Il est cependant assez facile de déployer votre configuration personnalisée sur des systèmes que vous utilisez régulièrement.
Tobu
Juste pour faire suite à votre pseudo ssh, c’est quelque chose que je fais tout le temps. Je le fais toujours avec l'IP si en cas de panne de DNS.
Jwbensley
9

Les liners uniques et les scripts minuscules pourraient durer éternellement. Je recommande l'homme bash et l'écriture de choses vous-même. Quelques bons trucs bash bas à http://www.commandlinefu.com . Voici quelques petites choses.

#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
la source
2
J'aime ton history -ptruc.
Tobu
9

Un petit conseil pour Bash si vous êtes un administrateur système et travaillez beaucoup avec les privilèges root:

shopt -o noclobber

Cela vous évitera de détruire accidentellement le contenu d'un fichier déjà existant si vous redirigez la sortie (> nom du fichier). Vous pouvez toujours forcer le remplacement avec> | filename.

Cyberdrow
la source
8

J'ai le suivant dans mon 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

Sur une machine locale, cela ressemble à:

[17:57][user:~]$

mais sur une télécommande (via ssh) c'est:

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

Je l'ai depuis un moment dans mon .bashrc et je l'ai trouvé utile. Si vous cochez la case, son écran de démarrage démarre automatiquement lorsque vous vous connectez. Ainsi, lorsque votre connexion réseau est interrompue, vous ne perdez rien de ce que vous faisiez. Il devrait être placé à la fin.

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
la source
Si vous configurez votre shell de connexion comme écran (et configurez par exemple bash dans votre .screenrc), alors, chaque fois que vous entrerez en SSH, screen tentera automatiquement de se reconnecter aux écrans déconnectés. Si cela échoue, cela créera un nouvel écran.
Dan Udey
@Dan Udey Je n'ai pas essayé ce que vous aviez suggéré moi-même, mais la bash que j'ai postée ne fera démarrer l'écran que sur les connexions ssh. Quel peut-être ce que vous voulez. Ce n'est tout simplement pas ce que je veux. :-)
baudtack
Si vous êtes inquiet au sujet des déconnexions, consultez mosh, je l'utilise tout le temps et le recommande vivement: mosh.mit.edu
jwbensley
5

De combien de pseudonymes fortuneavez-vous besoin, de toute façon?

J'aime faire un cddpseudonyme qui m'emporte là où je suis actuellement le plus susceptible de travailler sur ce serveur.

PATHla redéfinition appartient vraiment à .bash_profile, pas .bashrc.

Sur un serveur où j'utilise régulièrement un grand nombre de screens, mon .bashrcaura:

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

(Les screens ont été configurés avec, par exemple screen -U -S chaos1,.)

le chaos
la source
2
@chaos "De combien d'alias à la fortune avez-vous besoin, de toute façon?". Woo pour gagner. frak (et autres orthographes) pour échec.
Gareth
S'il vous plaît suivez ces étapes. 1) Étendez votre CHEMIN dans votre .bashrc. 2) Tapez 'bash'. 3) Tapez 'echo $ PATH'. 4) Tapez 'bash'. 5) Tapez 'echo $ PATH'. 6) Coup de poing dans la tête pour avoir ignoré et insulté les gens parce qu'ils en savent davantage sur les meilleures pratiques de l'administrateur système que vous.
chaos
Je suis impressionné par le fait que vous ayez une raison un peu valable, mais que vous n'allez pas me frapper au visage. Il est facile d’obtenir des shells non connectés lorsque votre chemin n’a pas déjà été étendu. Je retiens que c’est stupide, j’avais lu au départ que vous essayiez de dire que vous ne devriez pas définir de variables importantes dans votre .bashrc ou quelque chose du genre.
Ian Kelling
Peut-être que quelqu'un devrait commencer par "Dois-je définir mes variables PATH dans le fichier .bashrc ou .bash_profile"?
Gareth
3
@ Ian Kelling: Ce que je veux dire en réalité, c'est que les opérations qui doivent être effectuées une fois par connexion appartiennent à .bash_profile et les opérations qui doivent être effectuées une fois par instanciation du shell appartiennent à .bashrc.
chaos
5

Entre autres choses, je mets quelques valeurs par défaut à un prix inférieur, empêche la fermeture accidentelle de mon terminal et permet la navigation en avant dans l'historique:

# 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
la source
+1 pour leexport IGNOREEOF="2"
serverhorror le
5

J'ai quelques bits:

# 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
la source
3
Vos lignes HISTCONTROL se substituent, puisqu'il ne s'agit que d'une variable shell. ignoreboth combine ignorespace et ignoredups.
Annika Backstrom
4
Essayez cd -au lieu de bd
ptman le
5

Arrêtez tous les journaux dans / 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
la source
4

Pour avoir des couleurs pour toutes les commandes grep telles que grep, egrep et zgrep, j'ai les éléments suivants dans mon .bashrc

export GREP_OPTIONS='--color=auto'
Léo Léopold Hertz
la source
4

L'alias "dossiers" est génial! Je l'ai légèrement modifié pour que les répertoires avec des espaces ne causent pas d'erreurs.

alias folders='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'
phoenix8
la source
2
les dossiers triés par l'utilisation du disque, nice
dotjoe
3

Je ferais écho au commentaire de @ pjz sur le fait de savoir les choses manuellement plutôt que de les configurer. Surtout si vous accédez à de nombreuses machines, comme je semble toujours le faire.

Donc, je sais que c’est set -o viparce que je connais les commandes vi-edit de bash et que je ne connais pas celles d’emacs (en plus, Ctrl + A interfère avec screen). Sur mes propres boîtes, je mets ça dans.bashrc

Je trouve également que je dois inclure export EDITOR=vimparce qu'un certain nombre de distributions récentes par défaut de nano sont particulièrement gênantes pour être lancées par un utilitaire qui a besoin de vous pour éditer quelque chose, alors que je m'attendais à vi. : - /

Je modifie aussi mon invite. J'ai trouvé il y a très longtemps que l'ajout du dernier code d'erreur est juste assez utile pour que ça me plaise. Et j'aime bien le chemin complet dans l'invite. Et le screennombre actuel , aussi. Et il est logique d'inclure l'utilisateur actuel et le nom d'hôte. Mon invite estPS1='\u@\h $PWD $WINDOW [$?] \$ '

staticsan
la source
\ w devrait vous donner le chemin complet (sauf si vous êtes dans la hiérarchie de votre répertoire personnel lorsque '/ home / me' devient '~', par exemple :-)
dr-jan
C’est le bit "sauf pour" que je n’utilise pas \ w. :-)
staticsan
3

Demandez à bash de vérifier si la taille de la fenêtre a changé (empêche le montage de lignes de devenir étrange si vous redimensionnez la fenêtre de votre terminal)

shopt -s checkwinsize

C'est mon préféré. Cause bash à ajouter à l'historique au lieu de l' écraser . Généralement, lorsque vous lancez bash, il charge l’historique dans la mémoire et le ferme lorsque vous le fermez. Cela signifie que si vous chargez deux shells, utilisez les deux, puis fermez les deux, celle que vous avez fermée en dernier remplace toutes les modifications.

Ce fragment de code le fait tout d'abord uniquement ajouter des modifications (au lieu de l'écraser avec tout le tampon), puis de le faire, après chaque commande, écrire les modifications. En fait, vous obtenez une mise à jour en direct .bash_history. Ainsi, si vous démarrez un nouveau terminal, vous avez toutes les commandes de l'historique de vos autres sessions en cours d'exécution.

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

Voici les mines:

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
la source
2

Ce sont mes favoris:

export HISTFILESIZE=1000000000
export HISTSIZE=1000000

J'aime avoir un historique en ligne de commande qui n'oublie jamais.

Malheureusement, il y a quelque temps, j'ai lancé un shell de cron qui ne lisait pas .bashrc d'une manière ou d'une autre et j'ai tout découpé en 500 lignes, ce qui a détruit plusieurs années d'histoire. Je les recommande donc dans / etc / bashrc.

sauterelle
la source
2

Voici quelques un de mes préférés:

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'
À M
la source
2

Je l'utilise environ 20 fois par jour pour intégrer le dernier répertoire modifié:

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

Ces deux gardent des signets permanents des répertoires souvent utilisés:

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
la source
2

De l' automatisation de l'administration Linux et Unix de Kirk Bauer (excellent livre!)

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

La nouvelle ligne au début est à moi, j'aime bien avoir une ligne claire entre la sortie précédente et l'invite. Le reste c'est:

\ u = nom d'utilisateur

\ h = hôte

\ w = répertoire de travail

$? = dernier code retour

Andrew H
la source
1

Je compile un certain nombre de choses manuellement dans $ HOME / local, donc j'ai ce petit extrait:

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

J'ai aussi mon client IRC sur mon serveur qui tourne dans l'écran donc j'ai ceci (pas une chose .bashrc, mais toujours utile)

#!/usr/bin/env bash

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

J'utilise mes baskets sur de nombreuses machines, j'ai donc ce petit extrait pour m'assurer que LS est colorée. Cela résoudra le problème sur les machines OSX, peut-être même * BSD si vous ajustez la ligne uname.

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

En outre, j'ai une commande pour sauvegarder un fichier, utile si vous êtes sur le point de modifier un fichier de configuration et que vous souhaitez en faire une copie rapide avant la main.

bu () { cp $1 ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup ; }
Andrew Williams
la source
@ Andrew: Je lance votre premier code sans succès sous OSX. Cela casse les paramètres de mon invite.
Léo Léopold Hertz
Fonctionne bien ici (10.6.X)
Rev316
1

C'est l'un de mes favoris:

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

Si j'ai oublié de m'authentifier, cela me permet de le faire sans perdre mon frappe en faisant ssh-add après la session ssh.

Joshk0
la source
1

Quelques bons

Assurez-vous que SSH complète automatiquement le nom d’hôte pour lequel vous êtes ssh (s’il est dans votre configuration ou dans votre historique)

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

Quelques réglages utiles pour la complétion

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

Quelques utiles pour 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
la source