Những thứ hữu ích nào người ta có thể thêm vào .bashrc? [đóng cửa]


141

Có điều gì bạn không thể sống thiếu và sẽ làm cho cuộc sống của tôi trở nên dễ dàng hơn nhiều không? Đây là một số mà tôi sử dụng ('không gian đĩa' & 'thư mục' đặc biệt tiện dụng).

# 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
Đây phải là wiki cộng đồng
Toro

1
Biến thành wiki cộng đồng. Thưởng thức.
Gareth

4
Đường ống đến nhiều hơn? Tôi cá là bạn sẽ hạnh phúc hơn với ít hơn -F
derobert

Ngoại trừ việc có "sắp xếp" trước nhiều hơn, vì sắp xếp cần đầu vào đầy đủ, ít -F sẽ chỉ cho bạn thấy cách sắp xếp nhanh hơn, và tôi cá là nó khá nhanh.
GreenKiwi

1
Chỉ trong trường hợp có ai quan tâm, có một dịch vụ cho phép bạn duyệt, xây dựng một danh sách và nguồn bí danh của bạn: alias.sh
Sam152

Câu trả lời:


81

Tôi có một đoạn script trích xuất tài liệu lưu trữ, tôi tìm thấy nó ở đâu đó trên mạng:

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
Đẹp. Tuy nhiên, một lần nữa, có đối số IDE / Vim liên quan đến việc biết các lệnh từ bộ nhớ. Một chút tuyệt vời của kịch bản mặc dù. Chắc chắn sẽ có trong .bashrc Chúc mừng!
Gareth

19
Có một lệnh linux đơn giản và đẹp mắt gọi là "unp", Unpacker thực hiện điều này và hơn thế nữa.
Sander Marechal

Lệnh này có một tính năng bị thiếu. Nó không thể mở gói 7z tại boost.org/doc/libs/1_39_0/more/getting_started/ tựa chính xác. Bạn có biết làm thế nào để giải quyết vấn đề?
Léo Léopold Hertz

7
Các phiên bản mới hơn của tar tự động phát hiện loại lưu trữ, do đó có thể trích xuất tất cả các định dạng được hỗ trợ chỉ bằng 'tar xvf'.
Giáo sư Moriarty

@Sander dtrx cũng không tệ. Nó đảm bảo rằng kho lưu trữ trích xuất vào thư mục con của chính nó.
Tobu

39

Vì tôi sử dụng rất nhiều máy khác nhau, tôi .bashrcluôn đặt dấu nhắc lệnh để bao gồm, trong số những thứ khác, tên của máy chủ tôi hiện đang đăng nhập. Theo cách này, khi tôi ở ba cấp độ sâu trong telnet / ssh, tôi không gõ sai trong cửa sổ sai. Nó thực sự hút rm -rf .vào cửa sổ sai! (Lưu ý: Ở nhà, telnet bị tắt trên tất cả các máy. Tại nơi làm việc, ssh không phải lúc nào cũng được bật và tôi không có quyền truy cập root vào rất nhiều máy.)

Tôi có một tập lệnh ~/bin/setpromptđược thực thi bởi .bashrc, chứa:

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

Kịch bản lệnh này đặt lời nhắc đến tên máy chủ theo sau :)nếu lệnh cuối cùng thành công và :(nếu lệnh cuối cùng thất bại.


$? kiểm tra là một ý tưởng khá gọn gàng, tôi thích nó.
derobert

6
Tôi cũng hiển thị trạng thái trong lời nhắc của mình, nhưng giữ giá trị số và tô màu đỏ nếu khác không, nếu không thì màu xanh lá cây.
pss

Thú vị ....
imapoche

25

Màu cho các trang ít hơn làm cho các trang dễ đọc hơn một chút:

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'

Các trang màu cũng có thể được lấy bằng cách cài đặt hầu hết và sử dụng nó làm biến env MANPAGER. Nếu bạn muốn sử dụng máy nhắn tin này không chỉ cho con người, hãy sử dụng biến PAGER, như thế này:

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

24

Không còn cd ../../../ .. nhưng tăng 4

Tăng nhiều thư mục khi số được truyền dưới dạng đối số, nếu không có giá trị nào tăng lên 1 theo mặc định (được tìm thấy trong một liên kết trong một nhận xét trong stackoverflow.com và sửa đổi một chút)

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
}

Phiên bản up () này có vẻ phức tạp không cần thiết. Tôi sử dụng phiên bản này: up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. Bạn có thể xóa cuộc gọi đến 'pwd' nếu bạn muốn rõ ràng.
Matthew G

Tôi sử dụng một cái gì đó như thế này: # alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..'

19

Tôi giao dịch với rất nhiều máy khác nhau, vì vậy một trong những mục yêu thích của tôi là bí danh cho mỗi máy mà tôi cần thường xuyên SSH để:

alias claudius="ssh dinomite@claudius"

Nó cũng hữu ích để thiết lập một phím ssh tốt .ssh/configvà giúp việc nhảy giữa các máy trở nên dễ dàng hơn.

Một trong những bí danh yêu thích của tôi là để di chuyển lên các thư mục:

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

Và một số cho các biến thể thường được sử dụng của ls(và lỗi chính tả):

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ịch sử có thể rất hữu ích, nhưng theo mặc định trên hầu hết các bản phân phối, lịch sử của bạn bị thổi bay bởi mỗi lần thoát vỏ và nó không có nhiều thứ để bắt đầu. Tôi muốn có 10.000 dòng lịch sử:

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"

Bằng cách đó, nếu tôi biết rằng tôi đã làm một cái gì đó trước đây nhưng không thể nhớ chi tiết cụ thể, nhanh chóng history | grep foosẽ giúp chạy bộ nhớ của tôi.

Tôi thường thấy mình đầu ra đường ống thông qua awkđể có được một cột nhất định của đầu ra, như df -h | awk '{print $2}'để tìm kích thước của mỗi đĩa của tôi. Để làm cho điều này dễ dàng hơn, tôi đã tạo một hàm fawktrong .bashrc:

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

Bây giờ tôi có thể chạy df -h|fawk 2mà tiết kiệm một chút gõ.

Nếu bạn cần phải xác định một dấu phân cách ( ví dụ , awk -F:cho /etc/passwd), chức năng này rõ ràng là không thể xử lý đó. Phiên bản được đại tu một chút trong ý chính này có thể xử lý các awkđối số tùy ý trước số trường (nhưng vẫn yêu cầu đầu vào từ stdin).


2
Tôi cũng sử dụng các bí danh ssh và các phím ssh ... nó làm cho mọi thứ trở nên thật dễ dàng
devin

1
+1 cho các mẹo kiểm soát lịch sử.
Rene Saarsoo

2
bạn có thể đặt bí danh tên máy chủ trong .ssh / config để có hiệu lực tương tự. Trong trường hợp này, hãy thêm một mục 'Lưu trữ đám mây' với 'tên người dùng dinomite'
Sirex

15

Bashrc mã hóa GPG

Tôi chắc rằng tất cả chúng ta đều có những thứ chúng ta muốn đưa vào bashrc mà chúng ta không muốn dễ dàng đọc được bởi những kẻ lừa đảo. Giải pháp của tôi cho vấn đề này là:

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

Tôi có một đại lý GPG làm cho nó vì vậy tôi chỉ phải nhập mật khẩu của khóa riêng của mình một vài giờ một lần. Bạn vẫn phải có một số niềm tin vào người dùng hệ thống vì biến, chức năng và bí danh mà bạn xác định có thể được trích xuất từ ​​RAM. Tuy nhiên, tôi sử dụng điều này chủ yếu cho máy tính xách tay của tôi. Nếu nó bị đánh cắp, tôi không muốn ai đó dễ dàng nhìn thấy những thứ như:

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

Bạn cũng mã hóa lịch sử của bạn trong trường hợp đó? Tại sao không mã hóa nhà $ của bạn
Rqomey

@Rqomey, toàn bộ vấn đề là tôi không phải mã hóa lịch sử của mình vì mật khẩu của tôi không hiển thị trong .bash_history của tôi vì chúng bị ẩn bởi các bí danh hoặc chức năng. Trong đó bạn thấy những thứ như MYsql < garbagecollect.sqlthay vìmysql -uadmin -psecret < garbagecollect.sql
Bruno Bronosky


12

Tôi đã từng thiết lập những thứ này ở khắp mọi nơi nhưng sau đó nhận ra rằng tốt hơn hết là chỉ cần nhớ cách thực hiện chúng 'thủ công' vì điều đó có nghĩa là tôi sẽ 1) hiểu đầy đủ những gì đang diễn ra và 2) có quyền truy cập vào các khả năng này ngay cả khi .bashrc tùy chỉnh của tôi chưa được cài đặt.

Điều duy nhất tôi sử dụng bí danh cho những ngày này là cắt giảm việc gõ lặp đi lặp lại các dòng thực sự dài (ví dụ. alias myhost='ssh -T user@my.remote.host screen -dAr')


2
Đồng ý về việc ghi nhớ các lệnh hữu ích dài. Mặc dù vậy, tôi thấy rằng tôi đang chạy 'không gian đĩa' khá thường xuyên trên các máy chủ chạy trốn (ví dụ: php đang bị ngừng hoạt động ở mọi nơi).
Gareth

vâng, tôi thực sự có một cái gì đó tương tự như vậy (du / home / * --max-sâu 1 | sort -n> /home/.sizes) chạy hàng đêm để tôi có thể theo dõi mức tiêu thụ không gian của người dùng lớn dùng chung máy.
pjz

1
Dù vậy, đủ dễ để triển khai cấu hình tùy chỉnh của bạn trên các hệ thống bạn thường xuyên sử dụng.
Tobu

Cũng giống như theo dõi bí danh của bạn, đây là điều tôi làm mọi lúc. Tôi luôn luôn làm điều này với IP mặc dù trong trường hợp hết DNS.
jwbensley

9

Một trong những lớp lót và kịch bản nhỏ ngoài kia có thể tiếp tục mãi mãi. Tôi khuyên bạn nên bash và viết những thứ cho mình. Một số công cụ bash ngắn tốt tại http://www.commandlinefu.com . Đây là một vài điều.

#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
Tôi thích history -pthủ thuật của bạn .
Tobu

9

Một mẹo nhỏ cho Bash nếu bạn là một sysadmin và làm việc với các đặc quyền gốc rất nhiều:

shopt -o noclobber

Điều này sẽ ngăn bạn vô tình phá hủy nội dung của tệp đã có nếu bạn chuyển hướng đầu ra (> tên tệp). Bạn luôn có thể buộc ghi đè bằng> | tên tệp.


8

Tôi có những điều sau đây trong bashrc của tôi

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

Trên một máy cục bộ, nó trông giống như:

[17:57][user:~]$

nhưng trên một điều khiển từ xa (thông qua ssh) đó là:

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

6

Tôi đã có cái này trong .bashrc trong một thời gian và tôi thấy nó hữu ích. Nếu bạn đang truy cập vào hộp, sẽ tự động khởi động màn hình khi bạn đăng nhập, theo cách đó khi kết nối mạng của bạn bị gián đoạn hoặc bất cứ điều gì, bạn sẽ không mất bất cứ điều gì bạn đang làm. Nó nên được đặt ở cuối.

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

Nếu bạn đặt vỏ đăng nhập của mình thành màn hình (và định cấu hình, ví dụ bash trong .screenrc), thì bất cứ khi nào bạn SSH vào, màn hình sẽ tự động cố gắng kết nối lại với các màn hình bị ngắt kết nối. Nếu thất bại, nó sẽ tạo ra một màn hình mới.
Dan Udey

@Dan Udey Tôi chưa thử những gì bạn tự đề xuất, nhưng bash tôi đã đăng sẽ chỉ khởi động màn hình trên thông tin đăng nhập ssh như màn hình cài đặt như vỏ đăng nhập của bạn, cũng sẽ khởi động nó trên thông tin đăng nhập cục bộ. Mà có lẽ những gì bạn muốn. Đó không phải là điều tôi muốn. :-)
baudtack

Nếu bạn lo lắng về việc ngắt kết nối, hãy kiểm tra mosh, tôi sử dụng nó mọi lúc và rất khuyến khích điều đó: mosh.mit.edu
jwbensley

5

Bạn cần bao nhiêu bí danh fortune?

Tôi muốn tạo một cddbí danh đưa tôi đến bất cứ nơi nào tôi có khả năng đang làm việc trên máy chủ đó.

PATHxác định lại thực sự thuộc về .bash_profile, không .bashrc.

Trên một máy chủ nơi tôi thường xuyên sử dụng một bộ screens lớn, tôi .bashrcsẽ có:

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

( screenVí dụ, các s được thiết lập với screen -U -S chaos1.)


2
@chaos "Dù sao bạn cũng cần bao nhiêu bí danh để may mắn?". muốn giành chiến thắng. frak (và cách viết thay thế) cho thất bại.
Gareth

Hãy làm theo các bước sau. 1) Mở rộng PATH của bạn trong .bashrc. 2) Nhập 'bash'. 3) Nhập 'echo $ PATH'. 4) Nhập 'bash'. 5) Nhập 'echo $ PATH'. 6) Tự đấm vào đầu mình vì vô tình hạ thấp và xúc phạm mọi người vì họ biết nhiều về các thực hành tốt nhất của sysadmin hơn bạn.
hỗn loạn

Tôi ấn tượng rằng bạn có một lý do hơi hợp lệ, mặc dù sẽ không tự đấm vào mặt mình. Thật dễ dàng để có được các shell không đăng nhập trong đó đường dẫn của bạn chưa được mở rộng. Tôi lấy lại sự ngu ngốc của nó, ban đầu tôi đọc nó rằng bạn đang cố nói rằng bạn không nên đặt các biến quan trọng trong .bashrc của bạn hoặc một cái gì đó.
Ian Kelling

Có lẽ ai đó nên bắt đầu "Tôi nên đặt các biến PATH của mình trong .bashrc hoặc .bash_profile"?
Gareth

3
@Ian Kelling: Điều tôi thực sự nói là các hoạt động nên được thực hiện một lần cho mỗi lần đăng nhập thuộc về .bash_profile và các hoạt động nên được thực hiện một lần cho mỗi lần khởi tạo shell thuộc về .bashrc.
hỗn loạn

5

Trong số những thứ khác, tôi đặt một số giá trị mặc định ít hơn, ngăn chặn việc vô tình đóng thiết bị đầu cuối của tôi và cho phép điều hướng chuyển tiếp qua lịch sử:

# 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 choexport IGNOREEOF="2"
dị

5

Tôi có một vài bit:

# 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
Các dòng HISTCONTROL của bạn ghi đè lên nhau, vì đó chỉ là một biến vỏ. ignboth kết hợp bỏ qua không gian và bỏ qua.
Backika Annika

4
Hãy thử cd -thay vì bd
ptman

5

Đuôi tất cả các bản ghi trong / 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

Để có màu cho tất cả các lệnh grep như grep, egrep và zgrep, tôi có phần sau trong .bashrc của mình

export GREP_OPTIONS='--color=auto'

4

Bí danh 'thư mục' là tuyệt vời! Tôi đã sửa đổi nó một chút để các thư mục có dấu cách không gây ra lỗi.

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

2
các thư mục được sắp xếp theo cách sử dụng đĩa, hay
dotjoe

3

Tôi sẽ lặp lại nhận xét của @ pjz về việc biết mọi thứ bằng tay thay vì thiết lập chúng. Đặc biệt là nếu bạn truy cập vào nhiều máy móc, như tôi dường như luôn luôn làm.

Vì vậy, một điều tôi chắc chắn biết là set -o vivì tôi biết các lệnh chỉnh sửa vi trong bash và tôi không biết các lệnh emacs (bên cạnh đó, Ctrl + A can thiệp vào screen). Trên hộp của riêng tôi, tôi đặt nó vào.bashrc

Tôi cũng thấy tôi phải đưa vào export EDITOR=vimvì một số phân phối gần đây mặc định là nano, điều gây khó chịu nhất khi bị ném vào bởi một tiện ích cần bạn chỉnh sửa thứ gì đó, khi tôi đang mong đợi vi. : - /

Tôi cũng thay đổi lời nhắc của mình. Tôi đã tìm thấy từ lâu rằng việc thêm mã lỗi cuối cùng chỉ đủ hữu ích để tôi thích nó. Và tôi thích tên đường dẫn đầy đủ trong lời nhắc. Và screensố hiện tại , quá. Và nó có ý nghĩa để bao gồm tên người dùng và tên máy chủ hiện tại. Lời nhắc của tôi làPS1='\u@\h $PWD $WINDOW [$?] \$ '


\ w sẽ cung cấp cho bạn tên đường dẫn đầy đủ (trừ khi bạn nằm trong hệ thống phân cấp thư mục chính của bạn khi '/ home / me' trở thành '~', ví dụ :-)
dr-jan

Đó là bit "ngoại trừ" mà tôi không sử dụng \ w. :-)
staticsan

3

Kiểm tra bash để xem kích thước cửa sổ có thay đổi không (ngăn chỉnh sửa dòng không bị lạ nếu bạn thay đổi kích thước cửa sổ đầu cuối)

shopt -s checkwinsize

Đó là sở thích của tôi. Nguyên nhân bash để nối vào lịch sử thay vì ghi đè lên nó. Thông thường khi bạn khởi chạy bash, nó sẽ tải lịch sử vào bộ nhớ và khi bạn đóng nó, nó sẽ ghi lại. Điều này có nghĩa là nếu bạn tải hai shell, sử dụng cả hai, sau đó đóng cả hai, cái bạn đã đóng cuối cùng sẽ ghi đè tất cả các thay đổi.

Đoạn mã này trước hết chỉ bổ sung các thay đổi (thay vì ghi đè bằng toàn bộ bộ đệm), và sau đó khiến nó, sau mỗi lệnh, viết ra các thay đổi. Thực tế, bạn nhận được một bản cập nhật trực tiếp .bash_history, vì vậy nếu bạn bắt đầu một thiết bị đầu cuối mới, bạn có tất cả các lệnh từ lịch sử các phiên chạy khác của bạn.

shopt -s histappend
PROMPT_COMMAND='history -a'


3

Đây là mỏ:

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

Đây là những mục yêu thích của tôi:

export HISTFILESIZE=1000000000
export HISTSIZE=1000000

Tôi thích có một lịch sử dòng lệnh không bao giờ quên.

Thật không may, một lúc sau, tôi đã phóng một cái vỏ từ cron mà không đọc .bashrc bằng cách nào đó, và cắt mọi thứ xuống còn 500 dòng, phá hủy lịch sử một năm. Vì vậy, tôi khuyên bạn nên đi trong / etc / bashrc.


2

Đây là một trong số những cái tôi thích:

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

Tôi sử dụng điều này khoảng 20 lần một ngày để cd vào thư mục thay đổi cuối cùng:

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

Hai cái này giữ dấu trang vĩnh viễn của các thư mục thường được sử dụng:

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

Từ Tự động hóa quản trị Linux và Unix của Kirk Bauer (cuốn sách tuyệt vời!)

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

Dòng mới ở đầu là của tôi, tôi muốn có một đường rõ ràng giữa đầu ra trước và lời nhắc. Phần còn lại là:

\ u = tên người dùng

\ h = máy chủ

\ w = thư mục làm việc

$? = mã trả lại lần cuối


1

Tôi biên dịch một số thứ theo cách thủ công thành $ HOME / local để tôi có đoạn trích nhỏ này:

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

Tôi cũng có máy khách IRC của mình trên máy chủ đang chạy trên màn hình vì vậy tôi có cái này (không phải là .bashrc, nhưng vẫn hữu ích)

#!/usr/bin/env bash

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

1

Tôi sử dụng bashrc của mình trên nhiều máy, vì vậy tôi đã có đoạn trích nhỏ này để đảm bảo LS được tô màu. Điều này sẽ sửa nó trên các máy OSX, thậm chí có thể * BSD nếu bạn điều chỉnh dòng uname.

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

Ngoài ra, tôi đã có một lệnh để sao lưu tệp, hữu ích nếu bạn sắp thay đổi tệp cấu hình và muốn tạo một bản sao nhanh trước khi sử dụng.

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

@Andrew: Tôi chạy mã đầu tiên của bạn không thành công trong OSX. Nó phá vỡ cài đặt Prompt của tôi.
Léo Léopold Hertz

Hoạt động tốt ở đây (10.6.X)
Rev316

1

Đây là một trong những điều ưa thích của tôi:

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

Nếu tôi quên xác thực, nó cho phép tôi làm như vậy mà không phải lãng phí việc gõ phím của mình khi thực hiện ssh-add sau phiên ssh.


1

Một vài cái tốt

Làm cho SSH tự động hoàn thành tên máy chủ bạn ssh (nếu đó là trong cấu hình hoặc lịch sử của bạn)

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

Một số cài đặt hoàn thành bash hữu ích

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

Một số ứng dụng hữu ích cho 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'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.