¿Qué cosas útiles se pueden agregar al .bashrc? [cerrado]

141

¿Hay algo sin lo que no puedas vivir y que haga mi vida MUCHO más fácil? Aquí hay algunos que uso ('espacio en disco' y 'carpetas' son particularmente útiles).

# 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
fuente
3
Esto debería ser wiki comunitario
Toro
1
Convertido en wiki de la comunidad. Disfrutar.
Gareth
44
canalizado a más? Apuesto a que estarías más feliz con menos o menos -F
derobert
Excepto que existe ese "ordenar" antes que más, ya que el ordenamiento necesita la entrada completa, el menor -F solo le permitiría ver el ordenamiento más rápido, y apuesto a que es bastante rápido.
GreenKiwi
1
En caso de que alguien esté interesado, hay un servicio que le permite navegar, crear una lista y obtener sus alias: alias.sh
Sam152

Respuestas:

81

Tengo un pequeño script que extrae archivos, lo encontré en algún lugar de la red:

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
fuente
1
Agradable. Sin embargo, de nuevo, existe ese argumento IDE / Vim con respecto a conocer los comandos de memoria. Fantástico guión sin embargo. Definitivamente voy en el .bashrc Cheers!
Gareth
19
Hay un comando linux simple y agradable llamado "unp", el Unpacker que hace esto y más.
Sander Marechal
El comando tiene una característica faltante. No puede abrir el paquete 7z en boost.org/doc/libs/1_39_0/more/getting_started/… correctamente. ¿Sabes cómo resolver el problema?
Léo Léopold Hertz 준영
77
Las versiones más recientes de tar detectan automáticamente el tipo de archivo, por lo que pueden extraer todos los formatos compatibles con 'tar xvf'.
Prof. Moriarty
@Sander dtrx tampoco es malo en eso. Se asegura de que el archivo se extraiga en su propio subdirectorio.
Tobu
39

Como uso tantas máquinas diferentes, mi .bashrcsiempre establece el símbolo del sistema para incluir, entre otras cosas, el nombre del servidor en el que estoy conectado actualmente. De esta manera, cuando tengo tres niveles de profundidad en telnet / ssh, no escribo lo incorrecto en la ventana incorrecta. ¡Realmente apesta rm -rf .en la ventana equivocada! (Nota: en casa, telnet está deshabilitado en todas las máquinas. En el trabajo, ssh no siempre está habilitado y no tengo acceso de root a muchas máquinas).

Tengo un script ~/bin/setpromptque ejecuta my .bashrc, que 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} "

Esta secuencia de comandos establece la solicitud en el nombre de host seguido de :)si el último comando fue exitoso y :(si el último comando falló.

Eddie
fuente
El $? El cheque es una idea bastante bonita, me gusta.
derobert
66
También muestro el estado en mi solicitud, pero mantengo el valor numérico y lo coloreo de rojo si no es cero, de lo contrario es verde.
pgs
Interesante ....
imapollo
25

El color de las páginas de manual en menos hace que las páginas de manual sean un poco más fáciles de leer:

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'

Las páginas de manual en color también se pueden obtener instalando la mayoría y utilizándola como variable env del MANPAGER Si desea utilizar este buscapersonas no solo para hombre, use la variable PAGER, así:

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

No más cd ../../../ .. pero hasta 4

Sube muchos directorios a medida que pasa el número como argumento, si ninguno sube 1 por defecto (se encuentra en un enlace en un comentario en stackoverflow.com y se modifica un poco)

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
fuente
Esta versión de up () parece innecesariamente compleja. Yo uso esta versión: up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. Puede eliminar la llamada a 'pwd' si lo desea, obviamente.
Matthew G
Uso algo como esto: # Alias ​​de navegación del directorioalias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..'
Matt Kenefick
19

Trato con muchas máquinas diferentes, por lo que uno de mis favoritos es el alias para cada máquina que necesito frecuentemente para SSH para:

alias claudius="ssh dinomite@claudius"

También es útil configurar unas teclas buenas .ssh/configy ssh para que el salto entre máquinas sea aún más fácil.

Otro de mis alias favoritos es para subir directorios:

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

Y algunos para variaciones comúnmente utilizadas de ls(y errores tipográficos):

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"

El historial puede ser muy útil, pero de manera predeterminada en la mayoría de las distribuciones, cada historial que sale se desvanece, y para empezar no tiene mucho. Me gusta tener 10,000 líneas de historia:

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 esa manera, si sé que he hecho algo antes pero no puedo recordar los detalles, un rápido history | grep fooayudará a refrescar mi memoria.

A menudo me encontraba canalizando la salida awkpara obtener una determinada columna de la salida, como df -h | awk '{print $2}'para encontrar el tamaño de cada uno de mis discos. Para facilitar esto, creé una función fawken mi .bashrc:

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

Ahora puedo ejecutar lo df -h|fawk 2que ahorra un poco de tipeo.

Si necesita especificar un delimitador ( por ejemplo , awk -F:para /etc/passwd), esta función obviamente no puede manejar eso. La versión ligeramente revisada en este resumen puede manejar awkargumentos arbitrarios antes del número de campo (pero aún requiere la entrada de stdin).

Drew Stephens
fuente
2
Yo uso el alias de ssh y claves SSH también ... que hace que cada tan fácil
Devin
1
+1 para los consejos de control del historial.
Rene Saarsoo
2
puede poner alias de nombre de host en .ssh / config con el mismo efecto. En este caso, agregue una entrada 'Host cloudius' con 'nombre de usuario dinomite'
Sirex
15

GPG cifrado bashrc

Estoy seguro de que todos tenemos cosas que nos gustaría poner en nuestro bashrc que no queremos que los sudoers puedan leer fácilmente. Mi solución a esto es:

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

Tengo un agente GPG que lo hace, así que solo tengo que ingresar la contraseña de mi clave privada una vez cada pocas horas. Aún debe confiar en los usuarios del sistema porque sus variables, funciones y alias que defina podrían extraerse de la RAM. Sin embargo, uso esto principalmente para mi computadora portátil. Si se lo roban, no quiero que alguien vea fácilmente cosas como:

alias MYsql='mysql -uadmin -psecret'
wglatest(){ wget -O https://admin:secret@server.com/latest; }
revs Richard Bronosky
fuente
¿También encriptas tu historial en ese caso? ¿Por qué no cifrar su $ home?
Rqomey
@Rqomey, el punto es que no tengo que encriptar mi historial ya que mis contraseñas no aparecen en mi .bash_history porque están ocultas por alias o funciones. En él ves cosas como en MYsql < garbagecollect.sqllugar demysql -uadmin -psecret < garbagecollect.sql
Bruno Bronosky
12

Solía ​​configurarlos en todo el lugar, pero luego me di cuenta de que era mejor recordar cómo hacerlos 'manualmente' porque significaba que 1) entendería completamente lo que estaba sucediendo y 2) tendría acceso a estas capacidades incluso si mi .bashrc personalizado no estaba instalado.

Lo único que uso alias para estos días es reducir el tipeo repetitivo de líneas realmente largas (por ejemplo alias myhost='ssh -T [email protected] screen -dAr') .

pjz
fuente
2
De acuerdo con respecto a la memorización de comandos largos y útiles. Sin embargo, descubro que estoy ejecutando 'espacio en disco' con bastante frecuencia en servidores fuera de control (es decir, php es coredumping por todas partes).
Gareth
Sí, en realidad tengo algo similar a eso (du / home / * --max-depth 1 | sort -n> /home/.sizes) que se ejecuta todas las noches para poder vigilar el consumo de espacio de mis usuarios en el gran máquina compartida
pjz
1
Sin embargo, es bastante fácil implementar su configuración personalizada en los sistemas que usa regularmente.
Tobu
Solo como seguimiento de tu alias ssh, esto es algo que hago todo el tiempo. Sin embargo, siempre hago esto con la IP en caso de corte de DNS.
jwbensley
9

Los liners y los pequeños guiones por ahí podrían continuar para siempre. Recomiendo man bash y escribir cosas tú mismo. Algunas buenas cosas cortas de bash en http://www.commandlinefu.com . Aquí hay algunas cosas.

#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
fuente
2
Me gusta tu history -ptruco
Tobu
9

Un pequeño consejo para Bash si eres un administrador de sistemas y trabajas mucho con privilegios de root:

shopt -o noclobber

Esto evitará que destruyas accidentalmente el contenido de un archivo ya existente si redirige la salida (> nombre de archivo). Siempre puede forzar la sobrescritura con> | nombre de archivo.

Ciberdrow
fuente
8

Tengo lo siguiente en mi 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

En una máquina local se ve así:

[17:57][user:~]$

pero en un control remoto (a través de ssh) es:

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

He tenido esto en mi .bashrc por un tiempo y lo he encontrado útil. Si está entrando en la casilla, la pantalla de inicio se inicia automáticamente cuando inicia sesión, de esa manera cuando su conexión de red se interrumpe o lo que sea, no pierde lo que estaba haciendo. Debe colocarse al final.

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
fuente
Si configura su shell de inicio de sesión como pantalla (y configura, por ejemplo, bash en su .screenrc), cada vez que ingrese SSH, la pantalla intentará volver a conectarse automáticamente a las pantallas desconectadas. Si eso falla, creará una nueva pantalla.
Dan Udey
@Dan Udey No he probado lo que me sugirió usted mismo, pero el bash que publiqué comenzará la pantalla solo en los inicios de sesión ssh como pantalla de configuración como su shell de inicio de sesión, también lo iniciaría en inicios de sesión locales. Que tal vez lo que quieres. Simplemente no es lo que quiero. :-)
baudtack
Si le preocupan las desconexiones, visite mosh, lo uso todo el tiempo y lo recomiendo: mosh.mit.edu
jwbensley
5

¿Cuántos alias fortunenecesitas, de todos modos?

Me gusta hacer un cddalias que me lleve a donde sea que esté trabajando en ese servidor.

PATHLa redefinición realmente pertenece .bash_profile, no .bashrc.

En un servidor donde uso habitualmente un gran conjunto de screens, mi .bashrctendrá:

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

(Los screens se configuraron con, por ejemplo, screen -U -S chaos1).

caos
fuente
2
@chaos "¿Cuántos alias de fortuna necesitas, de todos modos?". cortejar para ganar. frak (y ortografías alternativas) para fallar.
Gareth
Por favor siga estos pasos. 1) Extiende tu RUTA en tu .bashrc. 2) Escriba 'bash'. 3) Escriba 'echo $ PATH'. 4) Escriba 'bash'. 5) Escriba 'echo $ PATH'. 6) Golpea en la cabeza por ignorar e insultar a las personas porque saben más sobre las mejores prácticas de sysadmin que tú.
caos
Estoy impresionado de que tengas una razón ligeramente válida, sin embargo, no voy a golpearme en la cara. Es fácil obtener shells sin inicio de sesión donde su ruta aún no se ha extendido. Retiro que es tonto, originalmente lo leí que intentabas decir que no deberías establecer variables importantes en tu .bashrc o algo así.
Ian Kelling
Quizás alguien debería comenzar un "¿Debo establecer mis variables PATH en .bashrc o .bash_profile"?
Gareth
3
@Ian Kelling: Lo que en realidad estoy diciendo es que las operaciones que deben realizarse una vez por inicio de sesión pertenecen a .bash_profile y las operaciones que deben realizarse una vez por instancia de shell pertenecen a .bashrc.
caos
5

Entre otras cosas, configuro algunos valores predeterminados por menos, evito cerrar accidentalmente mi terminal y habilito la navegación hacia adelante a través del historial:

# 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
fuente
+1 para elexport IGNOREEOF="2"
serverhorror
5

Tengo algunos 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
fuente
3
Sus líneas HISTCONTROL se anulan entre sí, ya que es solo una variable de shell. ignoreboth combina ignorespace e ignoredups.
Annika Backstrom
44
Prueba en cd -lugar de bd
ptman
5

Cola todos los registros en / 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
fuente
4

Para tener colores para todos los comandos grep como grep, egrep y zgrep, tengo lo siguiente en mi .bashrc

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

¡El alias de 'carpetas' es genial! Lo modifiqué un poco para que los directorios con espacios no causen errores.

alias folders='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'
phoenix8
fuente
2
carpetas ordenadas por uso del disco, agradable
dotjoe
3

Me gustaría repetir el comentario de @ pjz sobre saber las cosas manualmente en lugar de configurarlas. Especialmente si accedes a numerosas máquinas, como siempre parece que hago.

Entonces, uno que definitivamente sé es set -o viporque conozco los comandos de edición de vi en bash y no sé los de emacs (además, Ctrl + A interfiere con screen). En mis propias cajas, puse eso en.bashrc

También encuentro que tengo que incluir export EDITOR=vimporque una serie de distribuciones recientes están predeterminadas en nano, lo que es más molesto para una utilidad que necesita que edites algo, cuando esperaba vi. : - /

También modifico mi aviso. Descubrí hace mucho tiempo que agregar el último código de error es lo suficientemente útil como para que me guste. Y me gusta la ruta completa en el indicador. Y el screennúmero actual también. Y tiene sentido incluir el usuario actual y el nombre de host. Mi aviso esPS1='\u@\h $PWD $WINDOW [$?] \$ '

staticsan
fuente
\ w debería darle el nombre de ruta completo (a menos que esté dentro de la jerarquía de su directorio de inicio cuando '/ home / me' se convierta en '~' por ejemplo :-)
dr-jan
Es el bit "a excepción de" que no uso \ w. :-)
staticsan
3

Haga que Bash compruebe si el tamaño de la ventana ha cambiado (evita que la edición de línea se vuelva extraña si cambia el tamaño de la ventana de su terminal)

shopt -s checkwinsize

Esta es mi favorita. Hace que bash se agregue al historial en lugar de sobrescribirlo . Por lo general, cuando inicia bash, carga el historial en la memoria y, cuando lo cierra, lo escribe. Esto significa que si carga dos shells, use ambos, luego cierre ambos, el último que cerró sobrescribe todos los cambios.

Este fragmento hace que, en primer lugar, solo agregue cambios (en lugar de sobrescribir con todo el búfer) y luego haga que, después de cada comando, escriba los cambios. En efecto, obtienes una actualización en vivo .bash_history, por lo que si comienzas una nueva terminal, tienes todos los comandos del historial de tus otras sesiones en ejecución.

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

Aquí hay minas:

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

Estos son mis favoritos:

export HISTFILESIZE=1000000000
export HISTSIZE=1000000

Me gusta tener un historial de línea de comandos que nunca se olvida.

Desafortunadamente, hace un tiempo lancé un shell de cron que no leía .bashrc de alguna manera, y corté todo a 500 líneas, destruyendo la historia de un año. Así que recomiendo que vayan en / etc / bashrc.

skiphoppy
fuente
2

Aquí están algunos de mis favoritos:

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

Lo uso aproximadamente 20 veces al día para crear un CD en el último directorio modificado:

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

Estos dos mantienen marcadores permanentes de directorios de uso frecuente:

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

De la automatización de la administración de Linux y Unix por Kirk Bauer (¡gran libro!)

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

La nueva línea al principio es mía, me gusta tener una línea clara entre la salida anterior y la solicitud. El resto es:

\ u = nombre de usuario

\ h = host

\ w = directorio de trabajo

PS = último código de retorno

Andrew H
fuente
1

Compilo varias cosas manualmente en $ HOME / local, así que tengo este pequeño fragmento:

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

También tengo mi cliente IRC en mi servidor ejecutándose en la pantalla, así que tengo esto (no es una cosa .bashrc, pero aún es útil)

#!/usr/bin/env bash

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

Utilizo mi bashrc en numerosas máquinas, así que tengo este pequeño fragmento para asegurarme de que el LS esté coloreado. Esto lo solucionará en máquinas OSX, tal vez incluso * BSD si ajusta la línea uname.

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

Además, tengo un comando para hacer una copia de seguridad de un archivo, útil si está a punto de cambiar un archivo de configuración y desea hacer una copia rápida de antemano.

bu () { cp $1 ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup ; }
Andrew Williams
fuente
@ Andrew: ejecuté su primer código sin éxito en OSX. Rompe la configuración de mi mensaje.
Léo Léopold Hertz 준영
Funciona bien aquí (10.6.X)
Rev316
1

Este es uno de mis favoritos:

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

Si olvidé autenticar, me permite hacerlo sin tener que desperdiciar mi escritura haciendo ssh-add después de la sesión ssh.

joshk0
fuente
1

Un par de buenos

Haga que SSH complete automáticamente el nombre de host al que ssh (si está en su configuración o historial)

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

Algunas configuraciones útiles para completar 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

Algunos útiles para 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
fuente