Які корисні речі можна додати до .bashrc? [зачинено]


141

Чи є щось, без чого ти не зможеш жити, і полегшиш моє життя? Ось які я використовую ("дисковий простір" і "папки" особливо зручні).

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

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

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

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

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

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

3
Це має бути вікі спільноти
Toro

1
Перетворився на вікі спільноти. Насолоджуйтесь.
Гарет

4
трубопровід до більше? Б'юсь об заклад, що ви будете щасливішими з менш-менш -F
derobert

За винятком того, що існує такий "сортування" раніше, оскільки сортування потребує повного введення, тим менше -F просто дозволить вам бачити сортування швидше, і я думаю, що це досить швидко бовтається.
GreenKiwi

1
На всякий випадок, коли когось цікавить, є сервіс, який дозволяє переглядати, складати список та надсилати
Sam152

Відповіді:


81

У мене є невеликий сценарій, який витягує архіви, я знайшов його десь у мережі:

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

1
Приємно. Знову ж таки, є той аргумент IDE / Vim щодо того, щоб знати команди з пам'яті. Фантастичний біт сценарію, хоча. Однозначно збирається у .bashrc Ура!
Гарет

19
Є приємна і проста команда Linux, яка називається "unp", Unpacker, яка робить це та багато іншого.
Сандер Маречал

У команди є одна відсутність функції. Він не може правильно відкрити пакет 7z на boost.org/doc/libs/1_39_0/more/getting_started/… . Чи знаєте ви, як вирішити проблему?
Лео Леопольд Герц 준영

7
Новіші версії tar автоматично визначають тип архіву, тому можна витягувати всі підтримувані формати просто 'tar xvf'.
Проф. Моріарті

@Sander dtrx теж не поганий у цьому. Це гарантує, що архів витягує до власного підкаталогу.
Тобу

39

Оскільки я використовую так багато різних машин, мій .bashrcзавжди встановлює командний рядок, щоб серед іншого включати ім’я сервера, на якому я зараз увійшов. Таким чином, коли я на три рівні глибоко в telnet / ssh, я не набираю неправильну річ у неправильному вікні. Це дійсно смокче rm -rf .в неправильному вікні! (Примітка. В домашніх умовах telnet відключений на всіх машинах. На роботі, ssh не завжди ввімкнено, і у мене немає кореневого доступу до дуже багатьох машин.)

У мене є сценарій, ~/bin/setpromptякий виконується моїм .bashrc, який містить:

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

Цей скрипт встановлює підказку до імені хоста, після чого :)остання команда була успішною і :(якщо остання команда не вдалася.


$? чек - це дуже акуратна ідея, мені це подобається.
дероберт

6
Я також показую статус у своєму підказку, але зберігайте числове значення та пофарбуйте його червоним, якщо не є нульовим, інакше зеленим.
pgs

Цікаво ....
imapollo

25

Колір для mangages менше робить Mangages легше читати:

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'

Кольорові вкладки можна також отримати, встановивши більшість і використовуючи її як змінну MANPAGER env. Якщо ви хочете використовувати цей пейджер не лише для людини, використовуйте змінну PAGER, наприклад:

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

24

Не більше кд ../../../ .. але до 4

Піднімається багато dirs, оскільки число, передане як аргумент, якщо жоден не збільшується на 1 за замовчуванням (знайдено у посиланні у коментарі в stackoverflow.com та трохи змінив)

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
}

Ця версія up () здається зайвою складною. Я використовую цю версію: up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. Ви можете видалити дзвінок на "pwd", якщо бажаєте.
Матвій Г

Я використовую щось подібне: # Псевдоніми навігації в каталозіalias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..'
Метт Кенефік

19

Я маю справу з багатьма різними машинами, тому одним з моїх улюблених є псевдоніми для кожної машини, які мені часто потрібно SSH:

alias claudius="ssh dinomite@claudius"

Також корисно встановити хороші .ssh/configта клавіші ssh, щоб зробити перескакування серед машин ще простішим.

Ще один з моїх улюблених псевдонімів - це переміщення каталогів:

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

І деякі для часто використовуваних варіантів ls(та друкарських помилок):

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"

Історія може бути дуже корисною, але за замовчуванням у більшості дистрибутивів ваша історія видувається кожним виходом оболонки, і для початку це не так вже й багато. Мені подобається мати 10 000 рядків історії:

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"

Таким чином, якщо я знаю, що я щось робив раніше, але не можу запам’ятати конкретику, швидкий history | grep fooдопоможе пробіг моєї пам’яті.

Я часто виявляв, що пропускає вихід awk, щоб отримати певний стовпець виводу, як df -h | awk '{print $2}'щоб знайти розмір кожного з своїх дисків. Щоб полегшити це, я створив функцію fawkу своєму .bashrc:

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

Зараз я можу запустити, df -h|fawk 2що економить гарний набір тексту.

Якщо вам потрібно вказати роздільник ( наприклад , awk -F:для /etc/passwd), ця функція, очевидно, не може впоратися з цим. Трохи перероблений варіант у цій групі може обробляти довільні awkаргументи перед номером поля (але все ж вимагає введення з stdin).


2
Я також використовую псевдонім ssh та ssh ... це робить все так просто
Девін

1
+1 - поради щодо контролю історії.
Рене Саарсу

2
ви можете помістити псевдоніми імен хоста в .ssh / config з тим же ефектом. У цьому випадку додайте запис "Host cloudius" з "ім'ям користувача dinomite"
Sirex

15

GPG зашифрований bashrc

Я впевнений, що у всіх у нас є речі, які ми хотіли б вкласти в наш bashrc, що нам не хочеться легко читати судорами. Моє рішення для цього:

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

У мене є агент GPG, який робить це так, що мені потрібно вводити пароль свого приватного ключа раз на кілька годин. Ви все ще повинні мати певну довіру до користувачів системи, оскільки ваша змінна, функції та псевдоніми, які ви визначаєте, можуть бути вилучені з оперативної пам'яті. Однак я використовую це в основному для свого ноутбука. Якщо його вкрадуть, я не хочу, щоб хтось легко бачив такі речі, як:

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

Ви також шифруєте свою історію в цьому випадку? Чому б не зашифрувати свій $ home
Rqomey

@Rqomey, вся справа в тому, що мені не потрібно шифрувати свою історію, оскільки мої паролі не відображаються в моїй .bash_history, оскільки вони приховані псевдонімами або функціями. У ньому ви бачите такі речі, як MYsql < garbagecollect.sqlзамістьmysql -uadmin -psecret < garbagecollect.sql
Бруно Броноський


12

Раніше я їх встановлював всюди, але потім зрозумів, що краще просто запам'ятати, як робити їх "вручну", оскільки це означало, що я 1) повністю розумію, що відбувається, і 2) мати доступ до цих можливостей, навіть якщо мій користувацький .bashrc не встановлений.

Єдине, що я використовую псевдонімами в ці дні, - це скоротити повторне введення дійсно довгих рядків (напр. alias myhost='ssh -T user@my.remote.host screen -dAr')


2
Домовились про запам’ятовування довгих корисних команд. Я вважаю, що я досить часто використовую "дисковий простір" на запущених серверах (наприклад, php повсюдно обмежений).
Гарет

так, у мене насправді є щось подібне до цього (du / home / * - maxx-глибина 1 | sort -n> /home/.sizes) бігати вночі, щоб я міг невідкладно стежити за спожитим простором своїх користувачів. спільна машина.
pjz

1
Однак досить просто розгорнути власну конфігурацію в системах, якими ви регулярно користуєтесь.
Тобу

Так само, як слідкую за вашим ssh псевдонімом, це я постійно роблю. Я завжди роблю це з IP, хоча у випадку відключення DNS.
jwbensley

9

Одні вкладиші та крихітні сценарії там можуть тривати назавжди. Я рекомендую man bash і писати речі самостійно. Кілька хороших коротких башів на http://www.commandlinefu.com . Ось кілька речей.

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

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

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


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


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

2
Мені подобається твій history -pфокус.
Тобу

9

Маленька порада для Bash, якщо ви системний адміністратор і багато працюєте з root правами:

shopt -o noclobber

Це запобіжить випадковому знищенню вмісту вже наявного файлу, якщо ви будете перенаправляти вихід (> ім'я файлу). Ви завжди можете примусово перезаписати іменем> |.


8

У моєму башерці є наступне

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

На локальній машині це виглядає так:

[17:57][user:~]$

але на віддаленому (через ssh) це:

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

6

У мене це було в моєму .bashrc деякий час, і я вважаю це корисним. Якщо ви переходите до вікна, під час входу в систему автоматично з’являється екран запуску, таким чином, коли ваше мережеве з'єднання перерветься чи що завгодно, ви не втратите нічого, що робили. Його слід розмістити в кінці.

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

Якщо встановити оболонку для входу на екран (і налаштувати напр. Bash у вашому .screenrc), тоді, коли ви входите в SSH, екран автоматично намагатиметься знову підключитися до відключених екранів. Якщо це не вдасться, він створить новий екран.
Ден Удей

@Dan Udey Я не пробував того, що ти запропонував, але баш, який я розмістив, запустить екран лише на ssh логінах, які були настільки налаштованими, як і ваша оболонка для входу, також запустила б його на локальних реєстраціях. Яке, можливо, те, що ти хочеш. Це просто не те, що я хочу. :-)
бодотака

Якщо ви турбуєтесь про відключення, перевіряйте mosh, я його постійно використовую і дуже рекомендую: mosh.mit.edu
jwbensley

5

Скільки псевдонімів вам fortuneвзагалі потрібно?

Мені подобається зробити cddпсевдонім, який веде мене туди, де я зараз найімовірніше працюю на цьому сервері.

PATHпереосмислення дійсно належить .bash_profile, а не .bashrc.

На сервері, де я звичайно використовую великий набір screens, у мене .bashrcбуде:

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

( screenS були створені, наприклад,. screen -U -S chaos1)


2
@chaos "Скільки псевдонімів для щастя вам потрібно?". woo для перемоги. frak (та альтернативні написання) за провал.
Гарет

Будь ласка, виконайте ці кроки. 1) Розкладіть свій PATH у своєму .bashrc. 2) Введіть 'bash'. 3) Введіть 'echo $ PATH'. 4) Введіть 'bash'. 5) Введіть 'echo $ PATH'. 6) Ударте себе в голові за неосвічене зневаження та ображення людей, оскільки вони знають більше про кращі практики сисадміна, ніж ви.
хаос

Мені вражено, що ти маєш трохи поважну причину, але не збираєшся вдарити себе в обличчя. Легко отримати оболонки без входу, де ваш шлях ще не був розширений. Я вважаю, що його німий, я спочатку читав, що ви намагаєтесь сказати, що ви не повинні встановлювати важливі змінні у своєму .bashrc чи чомусь подібному.
Іен Келінг

Можливо, хтось повинен запустити "Чи слід встановлювати свої змінні PATH у .bashrc або .bash_profile"?
Гарет

3
@Ian Kelling: Насправді я кажу, що операції, які слід виконувати один раз за входом у систему, належать .bash_profile, а операції, які слід виконувати один раз за інстанціюванням оболонки, належать у .bashrc.
хаос

5

Крім усього іншого, я встановлюю деякі параметри за замовчуванням на меншу, щоб запобігти випадковому закриттю мого терміналу та ввімкнути перехід вперед по історії:

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

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

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

+1 дляexport IGNOREEOF="2"
serverhorror

5

У мене є кілька біт:

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

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

# Expand the history size
HISTFILESIZE=10000 
HISTSIZE=100

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

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

# pwsafe
alias pw='pwsafe -p'

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

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

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

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

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

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

3
Ваші лінії HISTCONTROL перекривають один одного, оскільки це лише змінна оболонки. ignoreboth поєднує простір ігнорування та ігнорування.
Аніка Бекстром

4
Спробуйте cd -замість bd
ptman

5

Оберіть всі журнали в / var / log

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


4

Псевдонім "папок" чудовий! Я трохи змінив його, щоб каталоги з пробілами не викликали помилок.

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

2
папки, відсортовані за використанням диска, приємно
dotjoe

3

Я б відгукнувся коментарем @ pjz про знання речі вручну, а не про їх налаштування. Особливо, якщо ви маєте доступ до численних машин, як я завжди це роблю.

Отож, я точно знаю - це set -o viтому, що я знаю команди редагування vi-файлів у bash, і я не знаю команд emacs (до того ж, Ctrl + A заважає screen). Я вкладав це в власні ящики.bashrc

Я також вважаю, що я повинен включати export EDITOR=vim тому що кілька останніх дистрибутивів за замовчуванням до нано, що найбільше дратує, щоб кинутись утилітою, яка потребує вас, щоб щось відредагувати, коли я очікував, що vi. : - /

Я також змінюю своє підказку. Я давно виявив, що додавання останнього коду помилки просто корисне, що мені подобається. І мені подобається повне ім'я шляху в підказці. І поточне screenчисло теж. І це просто має сенс включати поточного користувача та ім’я хоста. Моя підказкаPS1='\u@\h $PWD $WINDOW [$?] \$ '


\ w повинен дати вам повне ім'я шляху (якщо ви не знаходитесь в ієрархії домашнього каталогу, коли "/ home / me" стає "~", наприклад :-)
dr-jan

Біт "крім", який я не використовую \ w. :-)
статик

3

Попросіть bash перевірити, чи змінився розмір вікна (не дозволяє редагуванню рядків стати дивними, якщо ви зміните розмір вікна терміналу)

shopt -s checkwinsize

Це мій улюблений. Причиняє, що bash додається до історії замість перезапису . Як правило, коли ви запускаєте bash, він завантажує історію в пам'ять, а коли ви закриваєте її, вона виписує її. Це означає, що якщо ви завантажите дві оболонки, використовуйте обидві, а потім закрийте обидві, той, який ви закрили останнім, замінює всі зміни.

Цей фрагмент змушує його спочатку лише додавати зміни (замість того, щоб перезаписувати весь буфер), а потім викликати його після кожної команди виписувати зміни. Насправді ви отримуєте актуальне оновлення .bash_history, тому якщо ви запускаєте новий термінал, у вас є всі команди з історії інших запущених сеансів.

shopt -s histappend
PROMPT_COMMAND='history -a'


3

Ось міни:

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

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

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


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

# two handy single-letter aliases

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

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

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

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

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

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

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

2

Це мої улюблені:

export HISTFILESIZE=1000000000
export HISTSIZE=1000000

Мені подобається мати історію командного рядка, яка ніколи не забуває.

На жаль, деякий час я запустив оболонку з cron, яка якось не читала .bashrc, і рубала все до 500 рядків, знищуючи за багаторічну історію. Тому я рекомендую перейти в / etc / bashrc.


2

Ось кілька моїх улюблених:

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

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

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

2

Я використовую це близько 20 разів на день, щоб внести в останню змінену директорію:

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

Ці два зберігають постійні закладки часто використовуваних каталогів:

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

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

2

Від автоматизації управління Linux та Unix Кірка Бауера (чудова книга!)

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

Новий рядок на початку мій, мені подобається мати чітку межу між попереднім результатом та підказкою. Решта:

\ u = ім'я користувача

\ h = хост

\ w = робочий каталог

$? = останній код повернення


1

Я збираю ряд речей вручну в $ HOME / local, тому у мене є цей маленький фрагмент:

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

Також у мене на сервері працює мій клієнт IRC, тому я маю це (не річ .bashrc, але все-таки корисна)

#!/usr/bin/env bash

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

1

Я використовую свій bashrc на численних машинах, тому у мене є цей маленький фрагмент, щоб переконатися, що LS забарвлений. Це виправить це на машинах OSX, можливо, навіть * BSD, якщо ви налаштуєте лінію unme.

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

Крім того, у мене є команда створити резервну копію файлу, корисна, якщо ви збираєтеся змінити конфігураційний файл і хочете зробити швидку копію перед передачею.

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

@Andrew: Ваш перший код я невдало запускаю в OSX. Це порушує мої налаштування підказок.
Лео Леопольд Герц 준영

Тут чудово працює (10.6.X)
Rev316,

1

Це один із моїх улюблених:

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

Якщо я забув підтвердити автентифікацію, це дозволяє мені це робити, не витрачаючи на друк, роблячи ssh-add після сеансу ssh.


1

Пара хороших

Зробіть SSH автоматично заповнювати ім'я хоста, на яке ви ssh (якщо він є у вашому конфігурації чи історії)

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

Деякі корисні налаштування заповнення башти

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

Деякі корисні для 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'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.