Які налаштування ви зробили для свого профілю оболонки для підвищення продуктивності?


25

Я знаю, що деякі люди мають деякі сценарії запуску, а деякі люди персоналізують підказку. Один розробник використовує короткі псевдоніми для довгого шляху, який він часто відвідує, і частих команд, які він виконує.

Які ефективні налаштування ви зробили у своєму UNIX-профілі для підвищення продуктивності та простоти використання?


повинні бути CW, не можна відповісти об'єктивно.
акіра

Я згоден. Однак варіанту для CW не було. :-(
San

@akira @Michael Я часто стикаюся з цією ситуацією. Було б чудово, якби модератори могли редагувати / перехрещувати / перенаправляти питання. Тому що коментар, який ви залишаєте, не дуже допомагає користувачеві досягти того, що він насправді хоче. Без образи, просто пропозиція. Сподіваюся, ти зрозумієш.
San

Якщо ви хочете зробити вікі спільноти питань, позначте це для уваги модератора. Див . FAQ щодо вікі спільноти .
Жил "ТАК - перестань бути злим"

Відповіді:


11

.vimrc

збережіть файл із кореневими правами, ввівши w!!:

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


.bashrc

Не турбуйтеся з пристроями чи бінарними файлами під час grep:

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


Поділіться кодом в Інтернеті (як пастбін, але простіше) користувачем cat 1337.sh | webshare

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

Він повертає короткий URL у буфер обміну; ви можете додати ?whatever-langдо повернутої URL-адреси, щоб її було виділено синтаксисом та рядками.


.inputrc

Використовуйте режим 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після перезавантаження, але можна було б покращити це, наприклад, змусити її видалити темп-рес після виходу з оболонки.


Мені сподобався mcd варіант. Гарний, спасибі
San

+1 Я вже mcdбагато років використовую свою версію і mtdскоро додам щось подібне .
maaartinus

Я визначив своє mtd() { mcd $TMP/`date +%y%m%d-%H%M%S-%N`; }. Можливо, їй бракує портативності, але це досить добре для мене.
maaartinus

4

Мені подобається, щоб мій bash підказав код виходу попередньої команди, якщо він був не нульовим. Мені також подобається, що моя оболонка підбадьорює мене, коли я її використовую, тому я додав трохи дурості:

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імовірно
Мікель

так, це в моєму ~ / .bashrc
jsbillings

Постараюся що ..
Сан -

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
}

Нічого, це гарна ідея ..
Сан-

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

(Клавіші Swaps Escape і Caps Lock).


+1 для повторного перезавантаження ключів, мій Caps Lock відображається на повернення, КОМИ ПОТРІБНО КАПУТЬ ЗАКЛЮЧИТИ БУДЬ-ЯК?
віх

1
Я користувач Vim. Типово для користувачів Vim, щоб зіставити Escape на Caps Lock. Користувачі Emacs схильні відображати управління на Caps Lock.
полемон

1

Я псуюся з моїм 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 та малих командах), а потім вводити все це вниз кожен раз.


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, але цей спосіб набагато плавніший IMHO.

Налаштуйте 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>, все одно буде завершено DesktopіDownloads

Для баш:

# 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-користувач, тому в моєму bashrc є кілька рядків, які починають zsh, якщо він доступний у системі.
  • zshrc : Замість того, щоб копіювати свій zshrc з чогось на зразок grml (хоча там 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'

Весь каталог відображається в правій частині командного рядка, готовий до вирізання-n-вставлення. Детальніше про це пізніше.

Вам слід використовувати належним чином складений сучасний Vim через здатність мати кілька файлів vim-windows у файл та декілька буферів. Ваш .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-пробільні вкладки роблять код менш читабельним, і є дослідження, яке плаває навколо, щоб довести це.

Також важливим є "миша = 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. На всякий випадок, якщо хтось застряг у ньому або віддає перевагу.
Мікель

0

Додавання ненульового зворотного значення останньої команди - чудова ідея. Я думаю, що оригінальний плакат спеціально запитував про .profile / .cshrc / .bashrc. Варто згадати список інших часто налаштованих RC-файлів, але я б дотримувався лише налаштування оболонки для цього питання.

Нещодавно я також додав у свій запит прапор, який відображається, коли оболонка працює під екраном. Він використовує команду solaris "ptree" для пошуку процесів предків, але ви можете використовувати команду "pstree" в Linux, щоб зробити те саме.

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% "'

Я впевнений, що можна було б зробити красивішим. :-)

Майбутня порада, будьте уважні до читання $? після використання "якщо [". Якщо лівий кронштейн є вбудованим, він не перевищує значення $ ?. Але якщо ви використовуєте оболонку, де [не вбудований, то вона скине значення $? після тестування. Безпечніше призначати $? одразу у тимчасову змінну, а потім протестуйте її.


Ваша відповідь, мабуть, має бути коментарем ... Ось так!
VxJasonxV

0

показати останній змінений файл

Часто мені хочеться переглянути найсвіжіший файл. наприклад, я можу бути в каталозі журналів і хочу побачити, який файл є останнім, тому що це перше місце, щоб подивитися, чому щось не працює.

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
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.