Hal bermanfaat apa yang bisa ditambahkan seseorang ke .bashrc? [Tutup]

141

Apakah ada sesuatu yang Anda tidak bisa hidup tanpanya dan akan membuat hidup saya jauh lebih mudah? Berikut adalah beberapa yang saya gunakan ('diskspace' & 'folder' sangat berguna).

# 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
sumber
3
Ini harusnya komunitas wiki
Toro
1
Berubah menjadi wiki komunitas. Nikmati.
Gareth
4
disalurkan ke lebih banyak? Saya yakin Anda akan lebih bahagia dengan kurang lebih
derobert
Kecuali bahwa ada "sortir" sebelum lebih, karena sort membutuhkan input penuh, semakin sedikit -F hanya akan membiarkan Anda melihat penyortiran lebih cepat, dan saya yakin itu cukup cepat.
GreenKiwi
1
Untuk berjaga-jaga jika ada yang tertarik, ada layanan yang memungkinkan Anda untuk menjelajah, membuat daftar, dan mencari alias Anda: alias.sh
Sam152

Jawaban:

81

Saya punya skrip kecil yang mengekstrak arsip, saya menemukannya di suatu tempat di internet:

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
sumber
1
Bagus. Sekali lagi, ada argumen IDE / Vim tentang mengetahui perintah dari memori. Sedikit script yang fantastis. Pasti masuk di .bashrc Cheers!
Gareth
19
Ada perintah linux yang bagus dan sederhana yang disebut "unp", Unpacker yang melakukan ini dan banyak lagi.
Sander Marechal
Perintah memiliki satu fitur yang hilang. Itu tidak dapat membuka paket 7z di boost.org/doc/libs/1_39_0/more/getting_started/… dengan benar. Apakah Anda tahu cara mengatasi masalah?
Léo Léopold Hertz 준영
7
Versi tar yang lebih baru mendeteksi secara otomatis tipe arsip, sehingga dapat mengekstrak semua format yang didukung hanya dengan 'tar xvf'.
Prof. Moriarty
@Str Dtrx juga tidak buruk. Itu memastikan arsip mengekstrak ke subdirektori sendiri.
Tobu
39

Karena saya menggunakan begitu banyak mesin yang berbeda, saya .bashrcselalu menetapkan command prompt untuk memasukkan, di antaranya, nama server yang saat ini saya masuki. Dengan cara ini, ketika saya tiga level jauh di telnet / ssh, saya tidak mengetik hal yang salah di jendela yang salah. Benar-benar menyebalkan rm -rf .di jendela yang salah! (Catatan: Di rumah, telnet dinonaktifkan di semua mesin. Di kantor, ssh tidak selalu diaktifkan dan saya tidak memiliki akses root ke sangat banyak mesin.)

Saya memiliki skrip ~/bin/setpromptyang dijalankan oleh saya .bashrc, yang berisi:

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

Script ini mengatur prompt ke nama host diikuti oleh :)jika perintah terakhir berhasil dan :(jika perintah terakhir gagal.

Eddie
sumber
$? cek adalah ide yang cukup rapi, saya menyukainya.
derobert
6
Saya juga menunjukkan status di prompt saya, tetapi tetap nilai numerik dan warna merah jika bukan nol, jika tidak hijau.
pgs
Menarik ....
imapollo
25

Warna untuk halaman manual lebih sedikit membuat halaman manual sedikit lebih mudah dibaca:

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'

Halaman berwarna juga dapat diperoleh dengan menginstal sebagian besar dan menggunakannya sebagai variabel enV MANPAGER. Jika Anda ingin menggunakan pager ini tidak hanya untuk pria, gunakan variabel PAGER, seperti ini:

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

Tidak ada lagi cd ../../../ .. tetapi sampai 4

Naik banyak dir sebagai jumlah yang dilewati sebagai argumen, jika tidak ada yang naik 1 secara default (ditemukan di tautan dalam komentar di stackoverflow.com dan dimodifikasi sedikit)

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
sumber
Versi up () ini tampaknya tidak perlu rumit. Saya menggunakan versi ini: up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. Anda dapat menghapus panggilan ke 'pwd' jika Anda menginginkannya.
Matthew G
Saya menggunakan sesuatu seperti ini: # Direktori alias navigasialias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..'
Matt Kenefick
19

Saya berurusan dengan banyak mesin yang berbeda sehingga salah satu favorit saya adalah alias untuk setiap mesin yang saya harus sering SSH untuk:

alias claudius="ssh dinomite@claudius"

Ini juga berguna untuk mengatur kunci yang baik .ssh/configdan ssh untuk membuat hopping di antara mesin lebih mudah.

Salah satu alias favorit saya adalah memindahkan direktori:

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

Dan beberapa untuk variasi ls(dan kesalahan ketik) yang umum digunakan :

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"

Sejarah bisa sangat berguna, tetapi secara default di sebagian besar distribusi, riwayat Anda terhempas oleh setiap shell yang keluar, dan itu tidak terlalu berpengaruh. Saya suka memiliki 10.000 baris sejarah:

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"

Dengan begitu, jika saya tahu bahwa saya telah melakukan sesuatu sebelumnya tetapi tidak dapat mengingat secara spesifik, quick history | grep fooakan membantu menyentak ingatan saya.

Saya sering menemukan diri saya mem-piping output awkuntuk mendapatkan kolom tertentu dari output, seperti df -h | awk '{print $2}'untuk menemukan ukuran masing-masing disk saya. Untuk mempermudah ini, saya membuat fungsi fawkdi .bashrc saya:

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

Saya sekarang dapat menjalankan df -h|fawk 2yang menghemat sedikit mengetik.

Jika Anda perlu menentukan pembatas ( misalnya , awk -F:untuk /etc/passwd), fungsi ini jelas tidak bisa mengatasinya. Versi yang sedikit dirombak dalam inti ini dapat menangani awkargumen arbitrer sebelum nomor kolom (tetapi masih membutuhkan input dari stdin).

Drew Stephens
sumber
2
Saya menggunakan alias ssh dan kunci ssh terlalu ... itu membuat setiap begitu mudah
devin
1
+1 untuk kiat kontrol riwayat.
Rene Saarsoo
2
Anda dapat memasukkan alias nama host di .ssh / config ke efek yang sama. Dalam hal ini, tambahkan entri 'Host cloudius' dengan 'username dinomite'
Sirex
15

Bashrc terenkripsi GPG

Saya yakin kita semua memiliki hal-hal yang ingin kita masukkan ke bashrc kita yang kita tidak ingin mudah dibaca oleh sudoers. Solusi saya untuk ini adalah:

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

Saya memiliki agen GPG yang membuatnya jadi saya hanya perlu memasukkan kata sandi kunci pribadi saya setiap beberapa jam sekali. Anda masih harus memiliki kepercayaan pada pengguna sistem karena variabel, fungsi, dan alias yang Anda tetapkan dapat diekstraksi dari RAM. Namun, saya menggunakan ini terutama untuk laptop saya. Jika dicuri, saya tidak ingin seseorang dengan mudah melihat hal-hal seperti:

alias MYsql='mysql -uadmin -psecret'
wglatest(){ wget -O https://admin:secret@server.com/latest; }
Richard Bronosky
sumber
Apakah Anda juga mengenkripsi riwayat Anda dalam kasus itu? Mengapa tidak mengenkripsi $ rumah Anda
Rqomey
@Rqomey, intinya adalah bahwa saya tidak perlu mengenkripsi riwayat saya karena kata sandi saya tidak muncul di .bash_history saya karena disembunyikan oleh alias atau fungsi. Di dalamnya Anda melihat hal-hal seperti MYsql < garbagecollect.sqlbukannyamysql -uadmin -psecret < garbagecollect.sql
Bruno Bronosky
12

Saya biasa mengatur ini di semua tempat tetapi kemudian menyadari bahwa lebih baik untuk hanya mengingat bagaimana melakukannya secara 'manual' karena itu berarti saya akan 1) sepenuhnya memahami apa yang sedang terjadi dan 2) memiliki akses ke kemampuan ini bahkan jika .bashrc kustom saya tidak diinstal.

Satu-satunya hal yang saya gunakan alias untuk hari ini adalah untuk mengurangi pengetikan berulang-ulang dari baris yang sangat panjang (mis. alias myhost='ssh -T [email protected] screen -dAr')

pjz
sumber
2
Setuju tentang menghafal perintah panjang yang bermanfaat. Saya menemukan bahwa saya sedang menjalankan 'diskspace' cukup sering di server pelarian (yaitu php coredumping di semua tempat).
Gareth
ya, saya benar-benar memiliki sesuatu yang mirip dengan itu (du / home / * --max-depth 1 | sort -n> /home/.sizes) dijalankan setiap malam sehingga saya dapat mengawasi konsumsi ruang pengguna saya pada ukuran besar mesin bersama.
pjz
1
Cukup mudah untuk menggunakan konfigurasi khusus pada sistem yang Anda gunakan secara teratur.
Tobu
Sama seperti tindak lanjut Anda ssh alias, ini adalah sesuatu yang saya lakukan sepanjang waktu. Saya selalu melakukan ini dengan IP meskipun dalam kasus pemadaman DNS.
jwbensley
9

Satu baris dan skrip kecil di luar sana bisa berlangsung selamanya. Saya merekomendasikan pria bash dan menulis sendiri. Beberapa hal bash pendek yang bagus di http://www.commandlinefu.com . Inilah beberapa hal.

#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
sumber
2
Saya suka history -ptrik Anda .
Tobu
9

Sedikit tip untuk Bash jika Anda seorang sysadmin dan sering bekerja dengan hak akses root:

shopt -o noclobber

Ini akan mencegah Anda secara tidak sengaja merusak konten file yang sudah ada jika Anda mengarahkan ulang output (> nama file). Anda selalu dapat memaksa menimpa dengan> | nama file.

Cyberdrow
sumber
8

Saya memiliki yang berikut di bashrc saya

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

Pada mesin lokal sepertinya:

[17:57][user:~]$

tetapi pada remote (melalui ssh) itu adalah:

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

Saya sudah memiliki ini di .bashrc saya untuk sementara waktu dan saya merasa sangat membantu. Jika Anda memasukkan ke dalam kotak, layar mulai secara otomatis ketika Anda masuk, dengan begitu koneksi jaringan Anda terganggu atau apa pun, Anda tidak kehilangan apa pun yang Anda lakukan. Itu harus ditempatkan di akhir.

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
sumber
Jika Anda mengatur shell login Anda menjadi layar (dan mengkonfigurasi mis. Bash di .screenrc Anda), maka setiap kali Anda masuk SSH, layar akan secara otomatis mencoba menyambung kembali ke layar yang terputus. Jika gagal, itu akan membuat layar baru.
Dan Udey
@Dan Udey Saya belum mencoba apa yang Anda sarankan sendiri, tetapi bash yang saya posting akan memulai layar hanya pada login ssh sebagai pengaturan layar sebagai shell login Anda, juga akan memulainya pada login lokal. Yang mungkin apa yang Anda inginkan. Hanya saja bukan itu yang saya inginkan. :-)
baudtack
Jika Anda khawatir tentang terputus, periksa mosh, saya menggunakannya sepanjang waktu dan sangat merekomendasikannya: mosh.mit.edu
jwbensley
5

Berapa banyak alias fortuneyang Anda butuhkan?

Saya suka membuat cddalias yang membawa saya ke mana pun saya saat ini kemungkinan besar akan bekerja di server itu.

PATHredefinisi benar-benar milik .bash_profile, bukan .bashrc.

Pada server di mana saya secara rutin menggunakan satu set screens, saya .bashrcakan memiliki:

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

( screenS diatur dengan, misalnya screen -U -S chaos1,.)

kekacauan
sumber
2
@chaos "Lagipula berapa banyak alias keberuntungan yang kamu butuhkan?". merayu untuk menang. frak (dan ejaan alternatif) untuk gagal.
Gareth
Silakan ikuti langkah-langkah ini. 1) Perpanjang PATH Anda di .bashrc Anda. 2) Ketik 'bash'. 3) Ketik 'echo $ PATH'. 4) Ketik 'bash'. 5) Ketik 'echo $ PATH'. 6) Pukul diri Anda di kepala karena orang-orang yang dengan rendah hati merendahkan dan menghina karena mereka tahu lebih banyak tentang praktik terbaik sysadmin daripada Anda.
kekacauan
Saya terkesan bahwa Anda memiliki alasan yang sedikit valid, tidak akan meninju wajah saya sekalipun. Mudah untuk mendapatkan shell non-login di mana jalur Anda belum diperpanjang. Saya mengambil kembali itu bodoh, saya awalnya membacanya bahwa Anda mencoba mengatakan Anda tidak harus menetapkan variabel penting dalam .bashrc Anda atau sesuatu.
Ian Kelling
Mungkin seseorang harus memulai "Haruskah saya mengatur variabel PATH saya di .bashrc atau .bash_profile"?
Gareth
3
@Ian Kelling: Apa yang sebenarnya saya katakan adalah bahwa operasi yang harus dilakukan sekali per login termasuk dalam .bash_profile dan operasi yang harus dilakukan sekali per instantiasi shell termasuk dalam .bashrc.
kekacauan
5

Di antara hal-hal lain, saya menetapkan beberapa default kurang, mencegah menutup terminal saya secara tidak sengaja dan mengaktifkan navigasi maju melalui sejarah:

# 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
sumber
+1 untukexport IGNOREEOF="2"
serverhorror
5

Saya punya beberapa 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"
Hamish Downer
sumber
3
Baris HISTCONTROL Anda saling menimpa, karena itu hanya variabel shell. ignoreboth menggabungkan ignorespace dan ignoredups.
Annika Backstrom
4
Coba cd -alih-alih bd
ptman
5

Ekor semua log di / 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
sumber
4

Untuk memiliki warna untuk Semua perintah grep seperti grep, egrep dan zgrep, saya memiliki yang berikut di .bashrc saya

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

Alias ​​'folder' hebat! Saya memodifikasinya sedikit sehingga direktori dengan spasi tidak menyebabkan kesalahan.

alias folders='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'
phoenix8
sumber
2
folder diurutkan berdasarkan penggunaan disk, bagus
dotjoe
3

Saya akan menggemakan komentar @ pjz tentang mengetahui berbagai hal secara manual daripada mengaturnya. Terutama jika Anda mengakses banyak mesin, seperti yang selalu saya lakukan.

Jadi yang saya tahu adalah set -o vikarena saya tahu perintah vi-editing di bash dan saya tidak tahu emacs (selain itu, Ctrl + A mengganggu screen). Di kotak saya sendiri, saya memasukkannya.bashrc

Saya juga menemukan saya harus memasukkan export EDITOR=vimkarena sejumlah distro baru-baru ini default ke nano yang paling menjengkelkan untuk dilemparkan oleh sebuah utilitas yang mengharuskan Anda untuk mengedit sesuatu, ketika saya mengharapkan vi. : - /

Saya juga mengubah prompt saya. Saya sudah lama menemukan bahwa menambahkan kode kesalahan terakhir cukup berguna sehingga saya menyukainya. Dan saya suka pathname lengkap di prompt. Dan screenjumlah saat ini juga. Dan masuk akal untuk memasukkan pengguna dan nama host saat ini. Prompt saya adalahPS1='\u@\h $PWD $WINDOW [$?] \$ '

ahli statika
sumber
\ w harus memberi Anda nama path lengkap (kecuali Anda berada dalam hierarki direktori home Anda ketika '/ home / me' menjadi '~' misalnya :-)
dr-jan
Ini adalah bit "kecuali untuk" yang tidak saya gunakan \ w. :-)
staticsan
3

Dapatkan bash check untuk melihat apakah ukuran jendela telah berubah (mencegah penyuntingan baris menjadi aneh jika Anda mengubah ukuran jendela terminal Anda)

shopt -s checkwinsize

Ini adalah favorit saya. Penyebab bash ditambahkan ke riwayat alih-alih menimpa itu. Biasanya ketika Anda meluncurkan bash, itu memuat sejarah ke dalam memori, dan ketika Anda menutupnya menuliskannya. Ini berarti bahwa jika Anda memuat dua shell, gunakan keduanya, lalu tutup keduanya, yang Anda tutup terakhir akan menimpa semua perubahan.

Cuplikan ini menyebabkannya untuk pertama-tama hanya menambahkan perubahan (alih-alih menimpa dengan seluruh buffer), dan kemudian menyebabkannya, setelah setiap perintah, tulis perubahan. Akibatnya, Anda mendapatkan pembaruan langsung .bash_history, jadi jika Anda memulai terminal baru, Anda memiliki semua perintah dari riwayat sesi berjalan Anda yang lain.

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

Berikut adalah ranjau:

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

Ini adalah favorit saya:

export HISTFILESIZE=1000000000
export HISTSIZE=1000000

Saya suka memiliki sejarah baris perintah yang tidak pernah dilupakan.

Sayangnya, beberapa waktu yang lalu saya meluncurkan shell dari cron yang tidak membaca. Jadi saya merekomendasikan ini masuk / etc / bashrc.

skiphoppy
sumber
2

Inilah beberapa favorit saya:

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

Saya menggunakan ini sekitar 20 kali sehari untuk cd ke direktori yang terakhir diubah:

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

Keduanya menyimpan bookmark permanen dari direktori yang sering digunakan:

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

Dari Automating Linux and Unix Administration oleh Kirk Bauer (buku hebat!)

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

Baris baru di awal adalah milik saya, saya ingin memiliki garis yang jelas antara output sebelumnya dan prompt. Sisanya adalah:

\ u = nama pengguna

\ h = tuan rumah

\ w = direktori kerja

$? = kode pengembalian terakhir

Andrew H
sumber
1

Saya mengkompilasi sejumlah hal secara manual ke $ HOME / local jadi saya punya potongan kecil ini:

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

Saya juga punya klien IRC saya di server saya berjalan di layar jadi saya punya ini (bukan hal .bashrc, tapi masih berguna)

#!/usr/bin/env bash

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

Saya menggunakan bashrc saya di banyak mesin, jadi saya punya snippet kecil ini untuk memastikan LS berwarna. Ini akan memperbaikinya pada mesin OSX, bahkan mungkin * BSD jika Anda menyesuaikan garis yang tidak sama.

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

Juga, saya punya perintah untuk membuat cadangan file, berguna jika Anda ingin mengubah file konfigurasi dan ingin membuat salinan cepat sebelumnya.

bu () { cp $1 ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup ; }
Andrew Williams
sumber
@Andrew: Saya gagal menjalankan kode pertama Anda di OSX. Itu merusak pengaturan Prompt saya.
Léo Léopold Hertz 준영
Bekerja dengan baik di sini (10.6.X)
Rev316
1

Ini adalah salah satu favorit saya:

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

Jika saya lupa untuk mengotentikasi, itu memungkinkan saya melakukannya tanpa harus membuang pengetikan saya melakukan ssh-add setelah sesi ssh.

Astaga0
sumber
1

Beberapa yang bagus

Jadikan SSH secara otomatis melengkapi nama host yang Anda ssh (jika itu ada di konfigurasi atau riwayat Anda)

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

Beberapa pengaturan penyelesaian bash bermanfaat

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

Beberapa yang berguna untuk 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
sumber