[unix] 생산성을 높이기 위해 쉘 프로파일에서 어떤 사용자 정의를 수행 했습니까?

일부 사람들에게는 시작 스크립트가 있고 일부 사람들은 프롬프트를 개인화한다는 것을 알고 있습니다. 한 개발자는 자주 방문하는 긴 경로와 자주 실행하는 명령에 짧은 별칭을 사용합니다.

생산성과 사용 편의성을 높이기 위해 UNIX 프로파일에서 수행 한 모든 효과적인 사용자 정의는 무엇입니까?



답변

.vimrc

다음을 입력하여 루트 권한으로 파일을 저장하십시오 w!!.

cmap w!! w !sudo tee % > /dev/null


.bashrc

greping
할 때 장치 또는 이진 파일을 신경 쓰지 마십시오 .

alias grep='grep --color=auto --binary-files=without-match --devices=skip'


웹에서 코드를 공유하십시오 (예 : pastebin, 단순) cat 1337.sh | webshare

alias webshare='curl -F "sprunge=<-" http://sprunge.us | xclip'

클립 보드에 짧은 URL 을 돌려줍니다 . 반환 된 URL추가 ?whatever-lang하여 구문을 강조 표시하고 줄 번호 지정할 수 있습니다 .


.inputrc

readline 라이브러리 (많은 프로그램)를 사용하는 모든 것에 vi 모드를 사용하십시오 :

set editing-mode vi
set keymap vi


답변

하나의 명령으로 디렉토리를 만들고 cd

대부분의 경우 mkdir다음 명령은 cd <that dir>입니다.

이렇게하면 입력 내용이 저장됩니다.

# make a directory and cd to it
mcd()
{
    test -d "$1" || mkdir "$1" && cd "$1"
}

예를 들면 다음과 같습니다.

/home/mikel$ mcd somedir
/home/mikel/somedir$ 

내가 유용하다고 생각하는 또 다른 것은 버림받은 디렉토리를 만드는 쉬운 방법입니다. 예를 들어 프로그램을 컴파일하거나이 사이트에서 문제를 재현하려는 경우에도 마찬가지입니다. 때로는 디렉토리 정리를 잊어 버릴 수도 있습니다.

# make a temporary directory and cd to it
mtd()
{
    local dir
    dir=$(mktemp -d)
    if test -n "$dir"
    then
        if test -d "$dir"
        then
            echo "$dir"
            cd "$dir"
        else
            echo "mktemp directory $dir does not exist"
        fi
    else
        echo "mktemp didn't work"
    fi
}

그것이 작동하는 것을 보여주는 :

/home/mikel$ mtd
/tmp/tmp.wsnZjJ2KN6
/tmp/tmp.wsnZjJ2KN6$ 

/tmp재부팅 후 시스템 정리에 의존하고 있지만 쉘을 종료 한 후 temp 디렉토리를 삭제하도록하는 등 향상시킬 수 있습니다.


답변

bash 프롬프트가 0이 아닌 경우 이전 명령의 종료 코드를 표시하도록하고 싶습니다. 나는 또한 그것을 사용할 때 껍질이 나를 응원하는 것을 좋아하므로 약간의 침묵을 추가했습니다.

smiley() {
    RC=$?
    [[ ${RC} == 0 ]] && echo ':)' || echo ":( ${RC}"
}

export PS1="\$(smiley) \h [\A] [\W] \$ "

그래서 명령을 실행할 때 멋진 시각적 피드백을 얻습니다.

:) mycomputer [23:03] [~] $ sh -c 'exit 0'
:) mycomputer [23:03] [~] $ sh -c 'exit 11'
:( 11 mycomputer [23:03] [~] $ 

편집 : 이것은 ~ / .bashrc에 넣은 것입니다.


답변

N까지

디렉토리 트리에서 N 디렉토리 위로 이동

입력하는 대신

cd ../../../..

당신은 입력

up 4

그리고

cd -    

당신을 다시 가져올 것이다

함수를 .bashrc에 넣어 사용하십시오.

# (c) 2007 stefan w. GPLv3          
function up {
ups=""
for i in $(seq 1 $1)
do
        ups=$ups"../"
done
cd $ups
}


답변

.zshrc:

alias l='ls -CF'
alias ll='ls -ClhF'
alias la='ls -CaF'
alias lla='ls -CalhF'
alias l.='ls -CAF --ignore=\*'
alias ll.='ls -CAlhF --ignore=\*'
alias t='tree -C'

PS1=$'%{\e[0;33m%}%m %{\e[32;1m%}%~ %{\e[0;31m%}%#%{\e[m%} '

bindkey '^[[3~' delete-char

export GREP_OPTIONS="--color"

.xmodmaprc:

clear lock
keycode 9 = Caps_Lock ISO_Next_Group Caps_Lock ISO_Next_Group
keycode 66 = Escape NoSymbol Escape
add lock = Caps_Lock

(이스케이프 및 Caps Lock 키를 교체합니다).


답변

터미널을 많이 사용하기 때문에 bashrc를 엉망으로 만듭니다. 나는 내 bashrc에 많은 함수를 일반적으로 정의한다. 예 :

아카이브 추출 :

extract () {
libextract () {
if [ -f "$1" ] ; then
  case "$1" in
    *.tar.bz2) tar xjf "$1" ;;
    *.tar.gz)  tar xzf "$1" ;;
    *.bz2) bunzip2 "$1" ;;
    *.rar) rar x "$1" ;;
    *.gz) gunzip "$1" ;;
    *.tar) tar xf "$1" ;;
    *.tbz2) tar xjf "$1" ;;
    *.tgz) tar xzf "$1" ;;
    *.zip) unzip "$1" ;;
    *.Z) uncompress "$1" ;;
    *.7z) 7z x "$1" ;;
    *) echo "$1 ne moze biti raspakovan!" ;;
  esac
else
  echo "$1 nije validan fajl"
fi
}
 echo "Unesite putanju do direktorijuma u kome se nalaze arhive: " && read dir && dirprovera && cd $dir
  for f in *
    do
      mkdir ./$f-raspakovano && cd ./$f-raspakovano
      libextract ./../$f
      cd ./../
    done
  tipka
}

파일 및 폴더 이름 바꾸기 :

frename () {
if [ $# -gt 0 ]
then
 dir="$(echo $1)"
  dirprovera
  cd $dir
  for f in *
    do
      mv "$f" "`echo "$f" | tr -s " " "_" | tr "A-Z" "a-z"`" 2>/dev/null &
    done
  tipka
else
 echo "Upotreba: frename [direktorijum]" >&2
fi
}

큰 파일을 여러 개의 작은 파일로 나누려면 다음과 같이하십시오.

fsplit () {
if [ $# -gt 1 ]
then
 file="$(echo $1)"
 SIZE="$(echo $2)"
 PREFIX="$(echo $3)"
 if [ -z "$PREFIX" ]; then PREFIX="fsplit"; fi
  fileprovera
  split -d -a 3 -b $SIZE $file "$PREFIX-part-" || echo "Doslo je do greske!"
  tipka
else
 echo "Upotreba: fsplit [fajl] [velicina] [prefix]
Za velicinu se koriste m (MB), g (GB) ili k (KB) (15m, 650kb, 4.7g...)

Prefiks moze sadrzati brojeve, slova, i crtice (primer: moj_pre-fiks)
Ukoliko ne unesete prefiks isti ce biti dodeljen automatski u sledecem formatu:
  fsplit-part-XXX
gde XXX predstavlja broj dela fajla (001, 005, 189...)" >&2
fi
}

또한 일부 별칭 (예 : ls, grep 및 small 명령)에서 인수로 하나의 명령을 사용하는 것이 훨씬 더 쉽다는 것을 알기 때문에 매번 모든 별칭을 편집했습니다.


답변

(커뮤니티 위키이므로 각 트릭은 별도의 답변에 속합니다.)

안전한 로그 아웃

Ctrl+ D는 쉘을 종료하는 가장 쉬운 방법이지만 여전히 작업을 실행중인 경우 어쨌든 쉘을 종료합니다. 기본적으로 이는 해당 쉘 내부에서 실행중인 모든 프로그램이 종료됨을 의미합니다.

일부 쉘은 Ctrl+를 D두 번 누른 후에 만 ​​로그 아웃 할 수 있지만 실수로 너무 쉽게 수행 할 수 있습니다.

그래서 그 대신,이를 추가 .bashrc하거나 .zshrc또는 중 설정 파일 당신이 선호합니다.

alias x='_exit'

# prevent running "exit" if the user is still running jobs in the background
# the user is expected to close the jobs or disown them
_exit()
{
    case $- in *m*)
        # this way works in bash and zsh
        jobs | wc -l | grep -q '^ *0 *$'
        if test $? -eq 0
        then
            command exit "$@"
        else
            jobs
        fi
        ;;
    *)
        command exit "$@"
        ;;
    esac
}