Какие полезные вещи можно добавить в свой .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
Дероберт

За исключением того, что есть «сортировка» до того, как больше, так как для сортировки требуется полный ввод, меньше -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 Cheers!
Гарет

19
Есть хорошая и простая команда linux под названием "unp", Unpacker, которая делает это и многое другое.
Сандер Марешал

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

7
Более новые версии tar автоматически определяют тип архива, поэтому могут извлекать все поддерживаемые форматы просто с помощью команды tar xvf.
Профессор Мориарти

@ Sander dtrx тоже неплох в этом. Он обеспечивает извлечение архива в свой собственный подкаталог.
Тобу

39

Поскольку я использую так много разных машин, my .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

Интересно ....
Имаполло

25

Цвет для страниц меньшего размера облегчает чтение страниц:

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'

Цветные страницы также можно получить, установив большинство из них и используя его в качестве переменной env MANPAGER. Если вы хотите использовать этот пейджер не только для man, используйте переменную PAGER, например:

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

24

Не больше CD ../../../ .. но до 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», если хотите.
Мэтью G

Я использую что-то вроде этого: # Псевдонимы навигации по 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"

История может быть очень полезной, но по умолчанию в большинстве дистрибутивов ваша история сдувается при каждом выходе из оболочки, и с самого начала она не имеет большого значения. Мне нравится иметь 10000 строк истории:

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 ... это очень просто
devin

1
+1 за советы по контролю истории.
Рене Саарсоо

2
Вы можете поместить псевдонимы имени хоста в .ssh / config для того же эффекта. В этом случае добавьте запись 'Host cloudius' с 'username dinomite'
Sirex

15

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

Я уверен, что у всех нас есть вещи, которые мы хотели бы добавить в наш bashrc, которые мы не хотим, чтобы их легко читали sudoers. Мое решение это:

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
Договорились о запоминании длинных полезных команд. Я нахожу, однако, что я довольно часто запускаю 'diskpace' на сбежавших серверах (т. Е. Php выполняет повсеместный дампинг).
Гарет

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

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

Просто как продолжение вашего псевдонима ssh, это то, чем я занимаюсь все время. Я всегда делаю это с IP, хотя в случае сбоя DNS.
Jwbensley

9

Один лайнер и крошечные сценарии могут продолжаться вечно. Я рекомендую man bash и писать вещи самостоятельно. Несколько хороших коротких вещей для 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

У меня есть следующее в моем 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

На локальной машине это выглядит так:

[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

Если вы устанавливаете оболочку входа в систему как screen (и настраиваете, например, bash в вашем .screenrc), то всякий раз, когда вы входите в SSH, screen автоматически попытается повторно подключиться к отключенным экранам. Если это не удастся, он создаст новый экран.
Дэн Удей

@Dan Udey Я не пробовал то, что вы сами предложили, но bash, который я разместил, запустит экран только при входе в систему через ssh, как экран настроек, как ваша оболочка входа, а также при локальном входе. Который может быть, что вы хотите. Это просто не то, что я хочу. :-)
Бодэкт

Если вы беспокоитесь о разрывах, посмотрите mosh, я все время им пользуюсь
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 "Как много псевдонимов для состояния?" добиваться победы. Фрак (и альтернативные варианты написания) для неудачи.
Гарет

Пожалуйста, следуйте этим шагам. 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 сочетает в себе ignorespace и ignoredups.
Анника Бэкстрем

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-edit в bash и не знаю emacs (кроме того, Ctrl + A мешает screen). Я поставил это на свои собственные коробки.bashrc

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

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


\ w должен дать вам полный путь (если вы не находитесь в иерархии вашего домашнего каталога, когда '/ home / me' становится '~', например :-)
dr-jan

Это бит "кроме", который я не использую \ w. :-)
staticsan

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, если вы настроите строку uname.

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

@ Андрей: я неудачно запускаю твой первый код в 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 автоматически заполнить имя хоста, к которому вы подключаетесь (если это в вашей конфигурации или истории)

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

Некоторые полезные настройки завершения 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

Некоторые полезные для 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.