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


25

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

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


CW 여야하며 객관적으로 답변 할 수 없습니다.
akira

동의한다. 그러나 CW에는 옵션이 없습니다. :-(
San

@akira @Michael이 상황에 자주 직면합니다. 중재자가 질문을 편집 / 포스트 게시 / 리디렉션 할 수 있다면 좋을 것입니다. 당신이 남긴 주석은 사용자가 실제로 원하는 것을 달성하기 위해 많은 도움이되지 않기 때문입니다. 범죄는 없으며 제안 일뿐입니다. 이해하시기 바랍니다.
San

질문 커뮤니티 위키를 작성하려면 운영자 관심을 끌 수 있도록 플래그를 지정하십시오. 커뮤니티 위키 FAQ를 참조하십시오 .
Gilles 'SO- 악마 그만해'

답변:


11

.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

내가 전혀 몰랐던 훌륭한 팁.
San

7

하나의 명령으로 디렉토리를 만들고 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 디렉토리를 삭제하도록하는 등 향상시킬 수 있습니다.


나는 mcd 옵션을 좋아했다. 감사합니다
San

+1 mcd여러 해 동안 내 버전을 사용해 왔으며 mtd곧 같은 것을 추가 할 예정입니다.
maaartinus

내 정의했습니다 mtd() { mcd $TMP/`date +%y%m%d-%H%M%S-%N`; }. 아마도 이식성이 부족하지만 나에게 충분합니다.
maaartinus

4

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에 넣은 것입니다.


꽤 흥미로운. 그러나 나는 의심 스럽다. 코드는 어디에 있어야합니까?
San

에서 .bashrc아마도.
Mikel

그래, 내 ~ / .bashrc에에 있어요
jsbillings

그것을 시도합니다 ..
San

4

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
}

와우 .. 좋은 생각이다.
San San

2

.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 키를 교체합니다).


키를 다시 매핑하는 데 +1하면 Caps Lock이 Return에 매핑됩니다.
wag

1
저는 Vim 사용자입니다. Vim 사용자는 이스케이프를 Caps Lock에 매핑하는 것이 일반적입니다. Emacs 사용자는 Controls를 Caps Lock에 매핑하는 경향이 있습니다.
polemon

1

터미널을 많이 사용하기 때문에 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 명령)에서 인수로 하나의 명령을 사용하는 것이 훨씬 더 쉽다는 것을 알기 때문에 매번 모든 별칭을 편집했습니다.


1

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

안전한 로그 아웃

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
}

1

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

당신이 명령을 실행하는 모든 방법에 대한 역사를 검색

이미 Ctrl+ R에 대해 알고 있을지 모르지만이 방법은 훨씬 매끄 럽습니다.

이미 입력 한 것으로 시작하는 명령에 대한 기록을 검색 하려면 Alt+ P를 설정하십시오 .

예를 들어 ls Alt+ P, Alt+ P, Alt+ P 는 모든 ls명령을 통해 뒤로 검색 합니다.

이것을 당신의 /etc/inputrc또는 .inputrc위해 넣어야합니다 bash:

$if mode=emacs
"\ep": history-search-backward
"\en": history-search-forward
$endif

그리고 이것은 당신을 .zshrc위해 zsh:

bindkey -M emacs '^[p' history-beginning-search-backward
bindkey -M emacs '^[n' history-beginning-search-forward

한 단계 더 나아가서 위쪽 화살표를 사용하여이 작업을 수행 할 수도 있습니다.


1

간단한 계산기

$(( ... ))또는 expr ...매우 기본적인 계산을 사용 하거나 수행 할 수 있지만 정수 나누기 (예 :

$ expr 3 / 2
1

$ expr 1.5 \* 2
expr: non-integer argument

더 좋은 방법은을 사용하는 것 bc입니다.

# do some floating point arithmetic
calc()
{
    echo "scale=3; $*" | bc
}

그때:

$ calc 3 / 2
1.500
$ calc 1.5 \* 2
3.0

1
내 계산기는 alias py='PYTHONSTARTUP=~/.pythonstartup python'from math import *;그 파일입니다. 정수 나누기 문제는 여전히 해결되지 않았지만보다 복잡한 연산에 더 유용합니다.
maaartinus

1

더 나은 탭 완성

Tab아직 아무도 사용자 정의 완료를 언급하지 않았다고 생각 합니다.

여기 내가 가진 것입니다.

두 가지 주요 기능은 다음과 같습니다.

  • 각 명령은 명령이 기대하는 것에 따라 완료됩니다.
    예 : cd <Tab>디렉토리 만 제안합니다
  • 경우 무시
    등이 d<Tab>아직 완료 DesktopDownloads

bash의 경우 :

# custom tab completions
if type complete >/dev/null 2>&1
then
    if complete -o >/dev/null 2>&1
    then
        COMPDEF="-o complete"
    else
        COMPDEF="-o default"
    fi
    complete -a alias unalias
    complete -d cd pushd popd pd po
    complete $COMPDEF -g chgrp 2>/dev/null
    complete $COMPDEF -u chown
    complete -j fg
    complete -j kill
    complete $COMPDEF -c command
    complete $COMPDEF -c exec
    complete $COMPDEF -c man
    complete -e printenv
    complete -G "*.java" javac
    complete -F complete_runner -o nospace -o default nohup 2>/dev/null
    complete -F complete_runner -o nospace -o default sudo 2>/dev/null
    complete -F complete_services service
    # completion function for commands such as sudo that take a
    # command as the first argument but should complete the second
    # argument as if it was the first
    complete_runner()
    {
        # completing the command name
        # $1 = sudo
        # $3 = sudo
        # $2 = partial command (or complete command but no space was typed)
        if test "$1" = "$3"
        then
            set -- `compgen -c "$2"`
        # completing other arguments
        else
            # $1 = sudo
            # $3 = command after sudo (i.e. second word)
            # $2 = arguments to command
            # use the custom completion as printed by complete -p,
            # fall back to filename/bashdefault
            local comps
            comps=`complete -p "$3" 2>/dev/null`
            # "complete -o default -c man" => "-o default -c"
            # "" => "-o bashdefault -f"
            comps=${comps#complete }
            comps=${comps% *}
            comps=${comps:--o bashdefault -f}
            set -- `compgen $comps "$2"`
        fi
        COMPREPLY=("$@")
    }

    # completion function for Red Hat service command
    complete_services()
    {
        OIFS="$IFS"
        IFS='
        '
        local i=0
        for file in $(find /etc/init.d/ -type f -name "$2*" -perm -u+rx)
        do
            file=${file##*/}
            COMPREPLY[$i]=$file
            i=$(($i + 1))
        done
        IFS="$OIFS"
    }
fi

zsh의 경우 :

# set command completions
compctl -a {,un}alias
compctl -b bindkey
compctl -c command
compctl -/ {c,push,pop}d
compctl -E {print,set,unset}env
#compctl -c exec
compctl -f -x "c[-1,exec]" -c -- exec
compctl -j fg
# no -g according to zshcompctl
#compctl -g {ch}grp
compctl -j kill
compctl -c man
compctl -c nohup
compctl -u {ch}own
compctl -o {set,unset}opt
compctl -f -x "c[-1,sudo]" -c -- sudo
compctl -c {whence,where,which}
compctl -M '' 'm:{a-zA-Z}={A-Za-z}'

# make file name completion case-insensitive
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}'

1

안전한 압축

압축 프로그램은 기본적으로 원본 파일을 삭제합니다. 나는 그것을 좋아하지 않는다.

alias gzip='gzip --keep'
alias bzip2='bzip2 --keep'
alias xz='xz --keep'
alias lzma='lzma --keep'

여러 줄 프롬프트

tag() {
    TAG="${TAG} [$1]" exec zsh
}

reset_tags() {
    TAG='' exec zsh
}

color='green'
if [ "${USER}" = 'root' ]; then
    color='red'
fi

export PS1="${TAG} %B%F{yellow} *** %F{blue}%~\

%F{yellow}%(1j.[%j] .)%F{red}%(?..(%?%) )%F{${color}}%n@%m %F{blue}%# %f%b"
export RPS1='%B%F{blue}%D{%Y-%m-%d} %F{green}%D{%H:%M:%S}'
export PS2='%B%F{red}%n@%m%k %B%F{blue}%_> %b%f%k'
unset color
  • 현재 디렉토리를 별도의 줄에 표시합니다. 80 컬럼 터미널에서 깊은 디렉토리 트리를 처리 할 때 유용합니다.
  • 그래픽 환경을 사용하는 경우 모퉁이에 시계를 두는 것이 좋습니다. 이 프롬프트는 시간을 보여줍니다. 불행히도 Enter 키를 눌러 업데이트해야합니다.
  • 환경 변수와 함께 "태그"를 표시 할 수 있습니다. 예:

    tag 'DONT SHTUDOWN!!'
    reset_tags
  • 코드는 적어도 부분적으로 이것을 기반으로 합니다 .

히스토리 설정

dont_log() {
    HISTFILE="/dev/null" TAG="${TAG} %B%F{red}[LOGGING DISABLED]" zsh
}

if [ "${HISTFILE}" != '/dev/null' ]; then
    # history
    export HISTFILE="${HOME}/.zsh/history"
    export HISTSIZE="4096"
    export SAVEHIST="4096"

    # Don't overwrite, append!
    setopt APPEND_HISTORY

    # Write after each command
    # setopt INC_APPEND_HISTORY

    # Killer: share history between multiple shells
    setopt SHARE_HISTORY

    # If I type cd and then cd again, only save the last one
    setopt HIST_IGNORE_DUPS

    # Even if there are commands inbetween commands that are the same, still only save the last one
    setopt HIST_IGNORE_ALL_DUPS

    # Pretty    Obvious.  Right?
    setopt HIST_REDUCE_BLANKS

    # If a line starts with a space, don't save it.
    setopt HIST_IGNORE_SPACE
    setopt HIST_NO_STORE

    # When using a hist thing, make a newline show the change before executing it.
    setopt HIST_VERIFY

    # Save the time and how long a command ran
    setopt EXTENDED_HISTORY

    setopt HIST_SAVE_NO_DUPS
    setopt HIST_EXPIRE_DUPS_FIRST
    setopt HIST_FIND_NO_DUPS
fi
  • 여기 에서 뻔뻔스럽게 도난당했습니다 .
  • 명시 적으로 로깅 비활성화에 대한 지원을 추가했습니다. 비밀번호를 CLI 인수로 예상하는 프로그램을 처리하는 경우 유용합니다.

0
  • bashrc : 저는 zsh 사용자이므로 시스템에서 사용 가능한 경우 zsh를 시작하는 bashrc에 몇 줄이 있습니다.
  • zshrc : grml과 같은 것에서 내 zshrc를 복사하는 대신 (zshrc는 꽤 좋지만 자신의 롤을 원하지 않으면 아마도 최고 중 하나입니다) 내 zshrc를 작성합니다.
    • 사용자 정의 프롬프트가 있습니다. 다른 것들 중에서 마지막 명령의 리턴 코드가 0이 아닌 경우 표시됩니다.
    • 별칭이 있습니다. 많은 서버에 계정이 있으므로 시스템에서 사용 가능한 명령 버전을 확인하고 그에 따라 별칭을 설정해야하는 경우가 있습니다.
    • PATH 변수를 설정했습니다.
    • 다른 환경 변수를 설정했습니다 (예 : $ EDITOR)
  • vimrc : 저는 vim 사용자이므로 사용자 지정 및 사용자 지정 색 구성표가 있습니다.
  • screenrc : GNU 화면을 사용하여 여러 터미널을 열지 않고 로그인하지 않은 상태에서 기록을 보존하므로 자체 screenrc가 있습니다.

0

자동 완성 및 파일 이름 수정 보정을 켤 수 있다면! 아마도 가장 많은 시간을 절약 할 수있는 두 가지 일 것입니다. 그런 다음 사용법을 배우십시오-Bash와 Zsh에는 탭 완성 기능이 있습니다. Ksh에는 비효율적 인 이스케이프 백 슬래시가 있으므로 Ksh를 사용하지 않는 것이 좋습니다.

Zsh를 사용하지만 이와 같은 별칭은 Csh를 제외한 거의 모든 셸에서 작동합니다.

alias l='ls -FC --color=tty'
alias ls='ls -FC --color=tty'
alias h=history
alias m=more
alias vi=vim
alias cx='chmod +x'

'ps'의 별칭이 있어야하는 것처럼 보이지만 다양한 방법으로 'ps'를 사용하고 있으며 지금까지 아무것도 찾지 못했습니다.

Zsh에서 RPROMPT (오타가 아님) 변수를 설정하십시오.

RPROMPT='%d'

전체 디렉토리가 명령 줄 의 오른쪽 에 나타나고 잘라서 붙여 넣기 준비가됩니다. 나중에 더 자세히.

여러 vim-windows를 파일로 만드는 기능과 여러 버퍼로 인해 올바르게 컴파일 된 최신 Vim을 사용해야합니다. .vimrc는 다음과 같은 것을 가질 수 있습니다.

set mouse=c
set ml
set mls=5
set nowrap
set nobackup
set nonu
set showmatch
set tabstop=4
set shiftwidth=4
set showmode
set showcmd
set ruler
set notextauto
set laststatus=2
set mps=(:),{:},[:],<:>
set modelines=0

많은 것들이 개인적인 취향이지만 8 칸 탭은 코드를 읽을 수 없게 만들고 그것을 증명하기 위해 떠 다니는 연구가 있다고 생각합니다.

또한 "mouse = c"가 중요합니다. 마우스를 사용하여 파일 내부를 이동해서는 안됩니다. 키보드에서 손을 떼고 마우스를 만지면 다시 움직입니다. "hjkl"커서 이동 및 기타 키보드 페이징 및 커서 이동 키를 사용하십시오.

X11을 사용하는 경우 Xterm 구성에 몇 가지 작업을 수행해야합니다. 이것은 내 .Xresources 파일에서 나옵니다.

XTerm*VT100.scrollBar: true
XTerm*VT100.saveLines: 1000
XTerm*VT100.cutNewLine: false 
XTerm*VT100.cutToBeginningOfLine: false
XTerm*VT100.charClass: 33:48,35:48,37:48,42:48,45-47:48,64:48,95:48,126:48
XTerm*VT100*translations: #override \n\
    <Key>F2: insert-selection(PRIMARY,CUT_BUFFER0)

기본적으로 Xterm에 스크롤 막대를 제공하고 버퍼에 1000 줄의 텍스트를 저장하십시오. 이는 꽤 표준입니다.

charClass 지시어는 ".", '/'및 '*'와 같은 것을 "단어"로 만듭니다. '/'으로 구분 된 파일 이름의 일부를 두 번 클릭하면 ':'문자를 제외한 모든 것이 나타납니다.

cutToBeginningOfLine은 위의 Zsh RPROMPT에서 작동합니다. 명령 행의 RHS에 나타나는 현재 작업 디렉토리의 경로를 세 번 클릭하면 경로 만 선택합니다. 사본은 단어의 시작 부분에서 멈 춥니 다. 익숙해지면 매우 효율적입니다.

위의 X 리소스는 또한 붙여 넣기 키로 만듭니다. 이렇게하면 (마우스를 사용하여) 복사 한 후에는 마우스로 손을 움직이지 않고 붙여 넣어 클릭 할 수 있습니다.


FWIW에서 파일 이름 완성은 Esc``Esc또는 Esc``=ksh있으며에서 Tab작동합니다 ksh93. 누군가가 붙어 있거나 선호하는 경우를 대비하여.
Mikel

0

마지막 명령의 0이 아닌 반환 값을 추가하는 것이 좋습니다. 원래 포스터는 .profile / .cshrc / .bashrc에 대해 구체적으로 묻는 것 같습니다. 일반적으로 사용자 정의 된 다른 RC 파일 목록을 언급 할 가치가 있지만이 질문에 대한 쉘 사용자 정의 만 고수합니다.

또한 최근에 쉘이 화면에서 실행될 때 표시되는 플래그를 프롬프트에 추가했습니다. 상위 프로세스를 검색하기 위해 solaris "ptree"명령을 사용하지만 Linux에서 "pstree"명령을 사용하여 동일한 작업을 수행 할 수 있습니다.

SCREEN=""
if [ -f /usr/bin/ptree ]; then
   if ptree $$ | grep -v grep | grep -w screen > /dev/null 2>&1; then
       SCREEN="SCREEN "
   fi
fi

마지막 명령의 리턴 코드를 포함시키는 방법을 알아내는 데 몇 분이 걸렸으므로 여기에 게시하겠습니다.

PROMPT_COMMAND='if [ "$?" = 0 ]; \
        then RC=""; \
        else RC="RV=$? "; fi; PS1="% ${SCREEN}\h $RC\w\n% "'

나는 그것이 더 아름답게 될 수 있다고 확신합니다. :-)

향후 팁, $를 읽는 데주의해야합니까? "if ["를 사용한 후. 왼쪽 대괄호가 내장되어 있으면 $? 값을 대체하지 않습니다. 그러나 [가 내장되어 있지 않은 쉘을 사용하면 $ 값이 재설정됩니까? 테스트 후. $를 할당하는 것이 더 안전합니까? 임시 변수에 바로 넣은 다음 해당 변수를 테스트하십시오.


당신의 대답은 아마도 코멘트가되어야합니다 ... 이것처럼!
VxJasonxV

0

가장 최근에 변경된 파일 표시

종종 가장 최근 파일을보고 싶습니다. 예를 들어, logs 디렉토리에있을 수 있으며 어떤 파일이 왜 작동하지 않는지 가장 먼저 확인하기 때문에 가장 최근 파일을 확인하려고합니다.

ls -lt | head 입력하기가 번거롭기 때문에 다음과 같은 대안이 있습니다.

# show the most recently changed file
latest()
{
    if test $# -ne 0
    then
        /bin/ls -t -1 -d "$@" | head -n 1
    else
        /bin/ls -t -1 -d * | head -n 1
    fi
}

또한 와일드 카드 또는 파일 목록이 필요합니다 (예 :

$ latest mail* syslog*
syslog

모든 로그 파일의 이름이 타임 스탬프 인 경우 특히 유용합니다. 타임 스탬프의 형식을 걱정하지 않고 해당 프로그램의 최신 로그를 찾을 수 있습니다.

$ touch -d 'Feb 1' mylog.20110201
$ touch -d 'Feb 2' mylog.20110202
$ touch -d 'Feb 3' mylog.20110203
$ latest mylog*
mylog.20110203

다음 은 한 줄 대신 -<number>인쇄 하는 옵션을 지원하는 확장 버전입니다 <number>.

# show the most recently changed file
latest()
{
    local count=1               # how many files to print
    local promptlines=5         # how many lines to leave for the prompt
                                # when printing a screenful with -s
    local usage="Usage: latest [-n <number>] [-s] [--] [pattern]"
    while test $# -gt 0
    do
        case $1 in
        # -- = stop processing options
        --)
            shift
            break
            ;;
        # -n <number> = <number> files
        -n)
            if test -n "$2"
            then
                count=$2
                shift 2
            else
                echo "$usage" 1>&2
                return 1
            fi
            ;;
        # -s = one screenful
        -s)
            count=$((LINES - promptlines))
            shift
            ;;
        # -<number> = <number> files
        -[0-9]*)
            count=${1#-}
            shift
            ;;
        # anything else starting with a minus is a usage error
        -*)
            echo "$usage" 1>&2
            return 1
            ;;
        *)
            break
            ;;
        esac
    done

    if test $# -ne 0
    then
        /bin/ls -t -1 -d "$@" | head -n $count
    else
        /bin/ls -t -1 -d * | head -n $count
    fi
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.