Каковы Ваши любимые функции командной строки или приемы?

Bash

while + sleep:

while true
do 
    echo "Hi"
    sleep 1
done

Вот то же самое как краткая острота (Из комментариев ниже):

while sleep 1; do echo "Hi"; done

Использование ; разделить команды и использование sleep 1 для while тест, так как это всегда возвращает true. Можно поместить больше команд в цикл - просто разделяют их с ;

93
16.03.2011, 05:14
63 ответа

Это расширяется несколько на !! прием упоминается в этом ответе. Существует на самом деле набор связанных с историей команд, которые имеют тенденцию быть забытыми о (люди склонны наносить удар, 100 раз вместо этого ища команду, они знают, что ввели).

  • history команда покажет список недавно команд выполнения с указателем события налево
  • !N заменит командой, связанной с указателем события N
  • !-N займет место N th новая команда; например. !-1 заменит новой командой, !-2 второе новое, и т.д.
  • Как упомянуто в другом ответе, !! сокращение от !-1, быстро заменять последней командой
  • !string заменит новой командой, которая начинается string
  • !?string? заменит новой командой, которая содержит string

Указатели Word могут быть прибавлены к a ! команда истории для изменения результатов. Двоеточие разделяет событие и указатели слова, например. !!:0. Указатель события !! может быть сокращен до просто ! при использовании указателя слова, таким образом, !!:0 эквивалентно !:0.

  • !:0 получит команду, которая выполнялась
  • !:1 получит первый аргумент (и !:2 второе, и т.д.)
  • !:2-3 получит вторые и третьи аргументы
  • !:^ другой путь состоит в том, чтобы получить первый аргумент. !:$ получит последнее
  • !:* получит все аргументы (но не команда)

Модификаторы могут также быть добавлены к a ! команда истории, каждый снабженный префиксом двоеточием. Любое число может быть сложено на (например. !:t:r:p).

  • h - Строка до основного имени файла
  • t - Только основное имя файла
  • r - Строка до расширения файла
  • e - Только расширение файла
  • s/search/replacement - Замените первое вхождение search с replacement
  • gs/search/replacement - Замените все случаи search с replacement
88
27.01.2020, 19:30
  • 1
    И если Вы используете Bash (могло бы быть то же наверняка другие оболочки), M-^ (Meta-^) разворачивает вышеупомянутые операторы расширения истории для Вас, на всякий случай требуется видеть то, к чему Вы на самом деле обращаетесь. –  Eric Smith 16.09.2010, 17:41
  • 2
    я никогда не находил использование для! вещи команды. Это просто кажется плохим мне для выполнения команды, которую я не вижу. Было бы настолько легко ввести!-3 вместо!-4, и кто знает то, что могло произойти. Нахождение номера строки команды, которую я хочу выполнить, является обычно больше болью, чем это стоит. Прохладные приемы, хотя, но я никогда не находил реальное использование для них. –  Falmarri 16.12.2010, 20:37
  • 3
    @Falmarri я никогда не использую !-# также. Я действительно использую !string для выполнения последней команды, которая запускается со строки, но я обычно полный вкладкой она сначала (zsh) для проверки я выполняю правильную вещь –  Michael Mrozek♦ 16.12.2010, 20:42
  • 4
    Нет! :) "Выполнение !N будет работать команда..." является описанием, слишком узким; на самом деле, !N будет заменен командой...; и так далее для всех описаний в ответе. Более корректные и вводные намного более полезные возможности! Например, упомянутый sudo !!. –  imz -- Ivan Zakharyaschev 16.03.2011, 03:34
  • 5
    Для выполнения предыдущих команд, искавших строкой, я обычно просто нажимаю Ctrl-R. Несколько Ctrl-R выроют глубже в историю. Таким образом, я сразу вижу найденную команду, и могу отбросить ее и посмотреть далее. Ctrl-G сбегает из этого режима. Единственное неудобство - то, что Ctrl-R для bash; в Emacs для просматривания истории входных команд и значений (для M-x или других значений чтения) каждый использует Meta-R вместо этого (Meta-R также используется в eshell в Emacs). Таким образом, я часто порчу их. –  imz -- Ivan Zakharyaschev 16.03.2011, 03:45

Я люблю зажимать столько материала, сколько я могу в свой PS1. Некоторые полезные вещи помнить:

\e[s и \e[u сохраните и не сохраните позицию курсора соответственно. Я использую это для создания 'информационной панели' наверху экрана, несколько строк долго, которые могут соответствовать большему количеству материала. Пример:

PS1='\[\e[s\e[7m\e[1;1H\]\w\n\t        \j / \! / \#\[\e[u\e[0m\e[33;1m\][\u@\h \[\e[34m\]\W]\[\e[0m\]\$ '

Объединение с alias clear='echo -e "\e[2J\n"'.Попробовать!

Кроме того, PROMPT_COMMAND переменная определяет команду для выполнения перед PS1 каждый раз.

Другой bg команда. Если Вы забываете помещать & в конце команды просто нажмите ^Z и тип bg, и это работает в фоновом режиме.

3
27.01.2020, 19:30
  • 1
    благодарит за bg, когда я имею программу, работающую в фоновом режиме, и случайно нажимаю fg Я не знаю, как продвинуть его назад :D –  phunehehe 11.08.2010, 10:15
  • 2
    мне нравится чистое PS1 таким образом, я поместил большую часть материала, который я хочу в свою экранную нижнюю строку... –  Josh 14.12.2010, 18:01

удар - вставляет заключительный параметр предыдущей строки

высокий звук-. самое полезное сочетание клавиш когда-либо, попробуйте его и посмотрите, по некоторым причинам никто не знает об этом.

нажмите его снова и снова для выбора более старых последних параметров.

большой, когда Вы хотите сделать что-то больше к аргументу/файлу, что Вы использовали только момент назад.

64
27.01.2020, 19:30
  • 1
    Можно также использовать! $ для обращения к последнему аргументу в предыдущей команде. Это полезно, потому что это работает в сценариях, а также в интерактивном режиме. (Работы в ударе и zsh) –   10.08.2010, 23:07
  • 2
    Каждый раз Вы совершаете нападки alt-. это перейдет к предыдущей команде и вытянет последний аргумент от него. Таким образом, если Вы хотите последний аргумент от три команды назад, просто совершили нападки alt-. три раза. Согласованный –  clee 20.08.2010, 23:09
  • 3
    Это - привязка клавиш по умолчанию для yank-last-arg команда readline, таким образом, это должно работать с любой программой, связанной против readline, не просто Bash или ZSH. –  James Sneeringer 05.10.2011, 19:58
  • 4
    В vi режиме я должен был снова переплести последний аргумент рывка согласно этому ответу: superuser.com/questions/18498 / … –  Jeromy Anglim 08.10.2011, 16:14
  • 5
    В xterm, мета-. производит ®, но можно использовать esc вместо meta (в целом в ударе), таким образом, esc-. вместо этого. –  derobert 12.11.2011, 00:01

Мой фаворит

man 7 ascii

Простой и настолько очень полезный.

   Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
   ────────────────────────────────────────────────────────────────────────
   000   0     00    NUL '\0' (null character)   100   64    40    @
   001   1     01    SOH (start of heading)      101   65    41    A
   002   2     02    STX (start of text)         102   66    42    B
   003   3     03    ETX (end of text)           103   67    43    C
   004   4     04    EOT (end of transmission)   104   68    44    D
   005   5     05    ENQ (enquiry)               105   69    45    E
   006   6     06    ACK (acknowledge)           106   70    46    F
   007   7     07    BEL '\a' (bell)             107   71    47    G
   010   8     08    BS  '\b' (backspace)        110   72    48    H
   011   9     09    HT  '\t' (horizontal tab)   111   73    49    I
   012   10    0A    LF  '\n' (new line)         112   74    4A    J
   013   11    0B    VT  '\v' (vertical tab)     113   75    4B    K
   014   12    0C    FF  '\f' (form feed)        114   76    4C    L
   015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M
   016   14    0E    SO  (shift out)             116   78    4E    N
   017   15    0F    SI  (shift in)              117   79    4F    O
   020   16    10    DLE (data link escape)      120   80    50    P
   021   17    11    DC1 (device control 1)      121   81    51    Q
   022   18    12    DC2 (device control 2)      122   82    52    R
   023   19    13    DC3 (device control 3)      123   83    53    S
   024   20    14    DC4 (device control 4)      124   84    54    T
   025   21    15    NAK (negative ack.)         125   85    55    U
   026   22    16    SYN (synchronous idle)      126   86    56    V
   027   23    17    ETB (end of trans. blk)     127   87    57    W
   030   24    18    CAN (cancel)                130   88    58    X
   031   25    19    EM  (end of medium)         131   89    59    Y
   032   26    1A    SUB (substitute)            132   90    5A    Z
   033   27    1B    ESC (escape)                133   91    5B    [
   034   28    1C    FS  (file separator)        134   92    5C    \  '\\'
   035   29    1D    GS  (group separator)       135   93    5D    ]
   036   30    1E    RS  (record separator)      136   94    5E    ^
   037   31    1F    US  (unit separator)        137   95    5F    _
   040   32    20    SPACE                       140   96    60    `
   041   33    21    !                           141   97    61    a
   042   34    22    "                           142   98    62    b
   043   35    23    #                           143   99    63    c
   044   36    24    $                           144   100   64    d
   045   37    25    %                           145   101   65    e
   046   38    26    &                           146   102   66    f
   047   39    27    '                           147   103   67    g
   050   40    28    (                           150   104   68    h
   051   41    29    )                           151   105   69    i
   052   42    2A    *                           152   106   6A    j
   053   43    2B    +                           153   107   6B    k
   054   44    2C    ,                           154   108   6C    l
   055   45    2D    -                           155   109   6D    m

   056   46    2E    .                           156   110   6E    n
   057   47    2F    /                           157   111   6F    o
   060   48    30    0                           160   112   70    p
   061   49    31    1                           161   113   71    q
   062   50    32    2                           162   114   72    r
   063   51    33    3                           163   115   73    s
   064   52    34    4                           164   116   74    t
   065   53    35    5                           165   117   75    u
   066   54    36    6                           166   118   76    v
   067   55    37    7                           167   119   77    w
   070   56    38    8                           170   120   78    x
   071   57    39    9                           171   121   79    y
   072   58    3A    :                           172   122   7A    z
   073   59    3B    ;                           173   123   7B    {
   074   60    3C    <                           174   124   7C    |
   075   61    3D    =                           175   125   7D    }
   076   62    3E    >                           176   126   7E    ~
   077   63    3F    ?                           177   127   7F    DEL

Взгляните на этот веб-сайт commandlinefu.com.

Можно также взглянуть на эти четыре статьи Peteris Krumins на его блоге

49
27.01.2020, 19:30
  • 1
    Отдельное ascii программа также полезна. Помимо печати таблицы, это позволяет Вам запросить для одного или нескольких отдельных символов. –  Matthew Flaschen 15.08.2010, 08:24

Выполните последнюю команду как корень:

sudo !!
46
27.01.2020, 19:30

Не уверенный, если это рассчитывает как "прием", но люди, кажутся очень не знающий о стандарте readline горячие клавиши. Из конкретного использования в оболочках:

  • Ctrl+U - Сократите текущую строку
  • Ctrl+Y - Вставьте сокращение строки с Ctrl+U
  • Ctrl+L - Очистите экран и перерисуйте текущую строку
  • Ctrl+G - Получите новую строку и откажитесь от текущей
42
27.01.2020, 19:30
  • 1
    Только добавить некоторых к ним: Ctrl+A для движения в начало строки, Ctrl+E для движения в конец строки, Ctrl-K для стирания от курсора в конец строки. спасибо –  rsuarez 24.01.2011, 17:13
  • 2
    Ctrl+L соответствует символу FormFeed ascii. Это будет обычно перерисовывать экран в текстовых приложениях с экранным окном (например, энергия, меньше, мГц, и т.д.). Хороший, если экран был "загрязнен" некоторым выводом из другой программы. –  hlovdal 18.03.2011, 00:13
  • 3
    Добавление к списку горячих клавиш: Ctrl+W сокращать одно слово назад, Alt+F продвигаться одно слово, Alt+B пойти одно слово назад в строке. Мне нравится Ctrl+Y и Shift+Insert потому что у Вас может быть две скопированных строки. Один с Ctrl+U (вставьте его с Ctrl+Y ) и в то же время можно скопировать другое слово (выберите строку) вставка с (Shift+Insert). –   24.02.2012, 21:26

CTRL+R в Bash для поиска/активации ранее выполняемых команд (содержание ~/.bash_history).

Это часто чрезвычайно полезно. Выполнение этого псевдонима подаст PWD по HTTP (индексированному) на порте 8000:

alias webserver="python -m SimpleHTTPServer"

И потому что я работаю, делают все время, и spaz и вводят слишком быстро, эти псевдонимы являются, вероятно, моим наиболее используемым (серьезно):

alias maek=make
alias mkae=make
alias meak=make
alias amka=make
alias akme=make

И вероятно моя наиболее часто используемая часть Bash является простым сценарием, который я называю загрузкой. Я использую его для блитирования любого вида содержания к моему Linode, и это копирует получающийся URL HTTP в мой буфер обмена (щелчок средней кнопкой). Очень полезный для вставки материала людям в IRC:

scp -r $* $user@$host:public_html && {
    URL="http://$host/~$user/$(basename $1)"
    echo "$URL"
    xselection -replace PRIMARY "$URL"
}

Просто пара. Я могу отправить намного больше позже, должен возвратиться к работе!

36
27.01.2020, 19:30
  • 1
    alias mk=make Быстрее ввести и менее вероятно понять превратно. Или скомпилируйте от своего редактора, использующего горячую клавишу... –  Lars Haugseth 13.08.2010, 08:29
  • 2
    BTW Zsh имеет встроенное исправление орфографических ошибок, которое очень хорошо в исправлении простых опечаток. –  Adam Byrtek 15.09.2010, 20:14
  • 3
    Также в zsh, я думаю, что значение по умолчанию - когда Вы совершаете нападки ключ, это делает поиск истории, как будто Вы поразили ctrl r. Не могло бы быть значение по умолчанию, но это - установка. –  Falmarri 16.12.2010, 20:40
  • 4
    я рассмотрел бы alias m=make, или даже m=make -j6 или подобный - кроме я уже использую alias m=mutt –  jmtd 10.05.2011, 15:54

diff вывод двух команд, не создавая временный файл вручную (удар):

diff <(ls dir1) <(ls dir2)
31
27.01.2020, 19:30
  • 1
    Это также супер полезный для comm поскольку это берет файлы только, но в большом количестве случаев это - трата inodes. –  Marcin 05.05.2011, 17:11

Довольно основной, но люди, кажется, не знают, возвраты Вы к предыдущему dir:

cd -
30
27.01.2020, 19:30
  • 1
    я говорю Вам, cd.. от DOS внушен в моей памяти мышц... –  LawrenceC 16.02.2011, 07:04
  • 2
    Это - дешевая версия pushd и popd, хотя... –  Robert Massaioli 17.02.2011, 23:30
  • 3
    Точно так же существует cd (без аргумента), который берет Вас к Вашему корневому каталогу. –  Mei 04.02.2012, 01:57
  • 4
    Да, это является сумасшедшим. Где в странице справочника это показывает расширение '-'? Я всегда пробую (и забываю) использовать pushd/popd –  Chuck R 21.02.2012, 00:02

Расширение фигурной скобки:

Расширение фигурной скобки является механизмом, которым могут быть сгенерированы произвольные строки.

Это позволяет Вам заменять утомительные строки как:

mv loong/and/complex/file/name loong/and/complex/file/name.bacukup

с более коротким экземпляром

mv loong/and/complex/file/name{,backup}

некоторое другое использование

# to display the diff between /etc/rc.conf and /etc/rc.conf.pacsave
diff /etc/rc.conf{,.pacsave}

# to list files in both /usr/share and /usr/local/share
ls /usr/{,local}/share 

Арифметическое расширение:

Арифметическое расширение позволяет оценку арифметического выражения и замену результата. Формат для арифметического расширения:

$((expression))

Выражение рассматривают, как будто это было в двойных кавычках, но двойную кавычку в круглых скобках не рассматривают особенно. Все маркеры в выражении подвергаются расширению параметра, представляют расширение в виде строки, управляют заменой и заключают удаление в кавычки. Могут быть вложены арифметические расширения.

$ a=1
$ b=2
$ echo $(( a+(b*2) ))
5
29
27.01.2020, 19:30
  • 1
    Хороший, я не могу полагать, что забыл об этом. Существует также более компактное foo[123] это расширится в foo1 foo2 foo3, но они должны быть именами файлов для работы в этом случае –  Michael Mrozek♦ 23.09.2010, 17:31
  • 2
    hehe..спасибо... изучайте что-то каждый день +1 –  Stefan 29.09.2010, 23:19

Это обычно находится в моем сценарии запуска (.bashrc, .profile, безотносительно)

shopt совершенство, проверьте комментарии:

shopt -s cdspell        # try to correct typos in path
shopt -s dotglob        # include dotfiles in path expansion
shopt -s hostcomplete   # try to autocomplete hostnames

Псевдоним, которые сохраняют нажатия клавиш: mkdir и cd в него:

mkcd () { mkdir -p "$@" && cd "$@"; }

И наконец, что не менее важно, я разочаровался в запоминании синтаксиса tar, таким образом:

extract () {
    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   ;;
            *)          echo "'$1' cannot be extracted via extract()" ;;
        esac
    else
        echo "'$1' is not a valid file"
    fi
}
29
27.01.2020, 19:30
  • 1
    +1, почему я не думал об этом? (извлечение) –  MAK 19.09.2010, 19:48
  • 2
    у меня есть подобная функция к mkcd только то, что я называю идентификатор md. Однако использование "$" как аргумент CD не имеет никакого смысла, так как Вы не можете CD больше чем к одному единственному каталогу. "$" будет работать на mkdir, но затем Вы обрабатываете аргументы по-другому в пользу mkdir и CD, таким образом, я предложил бы md () { mkdir -p "$1"; cd "$1" } –  hlovdal 18.03.2011, 00:20
  • 3
    , как я добавляю те команды? просто вставка, как к .bashrc или добавляют "псевдоним" перед ними? –  Asaf 18.11.2011, 21:34

Две функции удара, которые сохраняют меня много нажатий клавиш.

Сделайте автоматически ls после каждого успешного CD:

function cd {
    builtin cd "$@" && ls
}

Поднимитесь n уровни:

# Usage .. [n]
function .. (){
    local arg=${1:-1};
    local dir=""
    while [ $arg -gt 0 ]; do
        dir="../$dir"
        arg=$(($arg - 1));
    done
    cd $dir #>&/dev/null
}
21
27.01.2020, 19:30
  • 1
    я никогда не понимал Вас, мог сделать builtin foo обойти наличие функции, определяемой cd; Я использовал chdir в моих функциях. Удобный –  Michael Mrozek♦ 11.08.2010, 16:39
  • 2
    Потрясающий. Просто добавьте-F к ls в функции CD, и это идеально подходит (для меня)! –  frabjous 22.08.2010, 05:49
  • 3
    я делаю то же как Вы для CD, но я имею еще несколько проверок работоспособности в и стараюсь не делать ls в неинтерактивном режиме: cd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; } –  jmtd 10.05.2011, 17:27

Так как я являюсь обычно промежуточным в командную строку прежде, чем желать искать (CTRL-R в ударе), у меня есть следующее в моем .bashrc

bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward

Это означает, что, если я ввожу CD затем, нажимают/вниз, я вижу все опции, к которым у меня есть cd'd. В основном я использую это для часто используемых директоров как "CD w", и я заканчиваю тем, что прошел все рабочие области, я использую партии.

17
27.01.2020, 19:30
  • 1
    Этот является действительно великим! Это расширяет поведение стрелок, не повреждая их основную функциональность. Спасибо! –  philfr 16.03.2011, 10:41

Одной вещью, которая сохраняет меня много времени, являются команды pushd/popd. Эти парни позволяют Вам создать стопку каталогов и уменьшить ввод много:

/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make
17
27.01.2020, 19:30
  • 1
    Да! псевдоним u=pushd; o=popd –  cannedprimates 15.08.2010, 12:57
  • 2
    .. и что делает u и o поддержать здесь? –  deizel 19.08.2010, 14:32
  • 3
    @deizel: Ничто определенное, просто ярлык, чтобы не вводить. –  Adam Byrtek 15.09.2010, 20:15
  • 4
    Похож на вторую букву команды, так как они оба запускают с p, Вы не можете использовать это для обоих. –  camh 16.09.2010, 13:20
  • 5
    В ZSH Вы можете setopt autopushd и все изменения каталога продвинут автоматически прибытие –  Michael Mrozek♦ 23.09.2010, 17:34

screen команда. Это в основном сохраняет Вашу сессию командной строки для того, когда Вы возвращаетесь. Это - вид терминального менеджера, как менеджер окон. Тот путь, на единственном терминальном сеансе, у Вас может быть несколько продолжений виртуальных терминалов. Это очень прохладно.

Если Вы используете screen, эта функция оболочки (помещает его в .bashrc) чрезвычайно полезно:

function scr {
    if screen -ls | grep -q Main; then
         # reattach to Main: 
         screen -xr Main
    else
         # name session "Main":
         screen -S Main
    fi
   }

после ввода scr, это проверит, существует ли Ваша основная сессия и присоединит к нему. Иначе это создаст его.

14
27.01.2020, 19:30
  • 1
    технически, это - собственная программа, не "команда". –  unperson325680 15.03.2011, 13:00
  • 2
    я рекомендовал бы tmux или dvtm по экрану. Они - более современные и более чистые замены. –  deltaray 20.11.2011, 05:59
  • 3
    Да, "tmux" бесспорно намного лучше, чем экран. –  ColinM 02.03.2012, 23:38
  • 4
    Это также более тесно следует конвенции Unix неинтуитивного, сокращенного :) –  user394 05.03.2012, 17:00

Если необходимо отредактировать особенно долгую командную строку в ударе

^X^E (Ctrl-X Ctrl-E) 

откроет его в редакторе ($EDITOR).

В zsh можно получить то же поведение путем добавления этого к .zshrc:

autoload edit-command-line
zle -N edit-command-line
bindkey '^X^e' edit-command-line 
13
27.01.2020, 19:30
alias s='sudo'
alias r='rake' # i'm a ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.

Одно из моего избранного, когда я забываю s:

$ s !! # last command with super user priviledges
11
27.01.2020, 19:30
  • 1
    При использовании ZSH, можно сделать что-то как bindkey -s '\e[12~' "sudo !!\n" обязывать (в этом случае) F2 выполнять ту команду. У меня есть та привязка, поэтому когда я выполняю что-то и вижу, "Вы забыли 'sudo', дурак" сообщение об ошибке, я могу просто нанести удар в F2 в раздражение –  Michael Mrozek♦ 10.08.2010, 22:50
  • 2
    Плохой ключ F2....) –  Eimantas 10.08.2010, 22:55
  • 3
    я использую это все время. Я постоянно забываю вводить sudo прежде, чем отредактировать мой файл hosts. Если это происходит, я просто выполняю sudo!!. +1 –  Brian Wigginton 14.01.2011, 00:16

Если команда берет вход stdin, можно считать вход из файла с <filename. Это может появиться где угодно в команде, таким образом, эти строки эквивалентны:

cat filename
cat <filename
<filename cat

Это особенно полезно для grep, поскольку он позволяет Вам помещать выражение в конце строки, таким образом, можно быстро изменить grep, управляют этим путем подбрасывания ударом, не будучи должен прокрутить оставленный закончить имя файла:

<filename grep 'expression'
10
27.01.2020, 19:30
  • 1
    хороший совет! Стоящий замечания, что это на самом деле не переупорядочивает аргументы команде. Вместо этого это передает файл по каналу в STDIN процесса, поскольку grep теперь не имеет никакого аргумента файла, это принимает значение по умолчанию к чтению из STDIN. Понимание этого откроет много возможностей использовать эту технику с другими командами и также помочь людям понять то, что продолжается, когда вещи не работают как ожидалось. Поскольку больше информации ищет каналы и редиректоры: dsj.net/compedge/shellbasics1.html –  chillitom 10.08.2010, 23:23
  • 2
    @chill; подсказка на самом деле формулировалась так плохо, что была чрезвычайно неправа. Я переписал его на основе Вашего комментария –  Michael Mrozek♦ 10.08.2010, 23:34
  • 3
    Что-то, что я недавно узнал: можно перенаправить вход к циклам (для, в то время как, и т.д.). См. faqs.org/docs/abs/HTML/redircb.html. –  Lucas Jones 11.08.2010, 13:41
  • 4
    Традиционно Вы помещаете перенаправление на конец. Пока конвейерная метафора выглядит лучше с <input foo | bar | baz >output, это не работает, при попытке смешаться в некоторых примитивах цикличного выполнения оболочки как while или for в середине. Таким образом, я сдался и просто поместил его в конец согласно конвенции. –  jmtd 10.05.2011, 16:07
  • 5
    @jmtd ну, помещая его на конец устраняет, "Это особенно полезно для grep, поскольку это позволяет Вам помещать выражение в конце строки, таким образом, можно быстро изменить grep, управляют этим путем подбрасывания ударом, не будучи должен прокрутить оставленный закончить имя файла" –  Michael Mrozek♦ 10.05.2011, 16:42

Можно использовать CDPATH настраивать каталог, эквивалентный из PATH; при попытке cd foo и существует нет foo в текущем каталоге оболочка будет регистрировать каждый из каталогов CDPATH поиск foo в них и переключателе к первому это находит:

export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise
9
27.01.2020, 19:30
  • 1
    , Это могло бы вызвать проблемы. См. softpanorama.org/Scripting/Shellorama/cdpath.shtml, "Если $CDPATH будет установлен, то встроенный CD неявно не добавит текущий каталог к нему. Это означает, что CD перестанет работать, если никакое допустимое имя каталога не может быть создано ни из одной из записей в $CDPATH, даже если каталог с тем же именем как имя, данное как аргумент CD, существует в текущем каталоге". Я был укушен этим, остановленной работой некоторого Make-файла. Добавление. явно мог бы помочь, хотя, но существуют некоторые проблемы с этим также. –  ustun 19.08.2010, 12:22
vi `which scriptname`

Поскольку, когда Вы не знаете, где что-то живет, и Вы не заботитесь также.

9
27.01.2020, 19:30
  • 1
    я не означаю продолжать включать функции ZSH, но я продолжаю думать о них как другие люди ответ :). В ZSH можно сделать =foo для вызова which автоматически, таким образом, vi =scriptname –  Michael Mrozek♦ 10.08.2010, 22:58
  • 2
    при наличии затруднений при поиске символа обратной галочки, можно также использовать $(scriptname) –  Patrick 16.10.2010, 11:20

Амперсанд. Это помещает Вашу команду в фоновом режиме, таким образом, можно продолжить вводить.

$> sudo updatedb &

При работе вперед, и через некоторое время Вы видите:

[1] 17403

И Ваш процесс сделан! Большой для вещей, где Вы не должны ожидать их для завершения.

9
27.01.2020, 19:30
  • 1
    И если Вашим приложением является GUI, Вы, вероятно, не хотите, чтобы это сохранило в заданиях. Добавить &! к фону задание и отрицают его от оболочки! –  unperson325680 15.03.2011, 13:01
  • 2
    @progo: Это не работает на меня в bash. –  Nathan Osman 06.05.2011, 05:07
  • 3
    @George. Кажется, что Вы правы. Я действительно узнавал, что zsh поддерживал его, и позже я услышал, что удар также поддерживал его. О, мой :( –  unperson325680 06.05.2011, 07:28
  • 4
    @progo: оказывается что, предварительно ожидая команда с nohup выполняет это. –  Nathan Osman 06.05.2011, 09:37

Заполнение клавишей Tab. Как плохо это высосало бы, если бы необходимо было вывести все символы каждого пути?

8
27.01.2020, 19:30
  • 1
    Существует самоубийство Linux. При неправильном вводе команды - она делает rm -fr /. Так да заполнение клавишей Tab довольно жизненно важно... –  Eimantas 21.08.2010, 07:58
  • 2
    Не настолько плохо, как Вы могли бы думать (но все еще плохо), Вы просто опрыскиваете подстановочные знаки везде: ls /usr/lib/game-d*/rott* –  jmtd 10.05.2011, 16:08
  • 3
    @Eimantas Не rm -rf / отключенный в большинстве систем Linux? –  Bernhard Heijstek 09.07.2011, 10:02
  • 4
    @phycker - Я упомянул Самоубийство Linux, не "все". –  Eimantas 10.07.2011, 17:25

Umount служат смонтированное устройство:

mount /media/whatever
...
u!mo

!mo расширяется до последней команды, которая запустилась с mo (по крайней мере, в ударе). Иногда каждый делает mv в середине, таким образом, u!m не будет работать как часто.

7
27.01.2020, 19:30
  • 1
    Используйте Ctrl+Shift+6 (Ctrl +^) для расширения команды, не выполняя его как меры безопасности –  ColinM 02.03.2012, 23:48

У меня есть это в моем .bashrc

#shortcut for CTRL+C and CTRL+V
alias c-c='xclip -sel clip'
alias c-v='xclip -o -sel clip'

 

function find-all() {
    python -c "import re
import sys
for i in re.findall('$1', sys.stdin.read()):
    if type(i) == type(''):
        print i
    else:
        print i[0]"
}

И когда я имею исходный код HTML в буфере обмена и хочу найти все ссылки, я использую

c-v | find-all 'href="([^"]*)"' | c-c

И у меня есть все URL в буфере обмена

У меня также есть эта функция

function lsq(){
    ls -lh $@ | tr -s ' ' | cut -d' ' -f5,8
}

которые отображают размер (человекочитаемое) и имя файла.

alias temp='cat /proc/acpi/thermal_zone/THRM/temperature'

этот псевдоним для выставочной температуры

function separate() {
    python -c "import sys,re; print '$1'.join(re.split('\s*', sys.stdin.read().strip()))";
}

с этой функцией я могу вычислить продукт или сумму аргументов.

alias sum='separate + | bc'
alias product='separate * | bc'

function split-join() {
    python -c "import sys,re; print '$2'.join(re.split('$1', sys.stdin.read().strip()))";
}

Это - полезная функция, которые разделяют стандартный вход, разделенный regex, и затем присоединяются к результату.

function factorial() {
    seq -s* $1 | bc
}

функция факториала

function wiki() { dig +short txt $1.wp.dg.cx; }

Этот функциональный дисплей текст Wiki по DNS

У меня также есть три цвета funcions

function blue() {
    echo -e "\x1b[34m\x1b[1m"$@"\x1b[0m";
}

function green() {
    echo -e "\x1b[32m\x1b[1m"$@"\x1b[0m";
}

function red() {
    echo -e "\x1b[31m\x1b[1m"$@"\x1b[0m";
}

 

function md5check() {
    test `md5sum $2 | cut -d' ' -f1` = "$1" && green [OK] || red [FAIL]
}

Эта функция проверяет хеш файла md5.

это покажет сообщение об ошибке для данного кода

function strerror() { python -c "import os; print os.strerror($1)"; }

Можно распечатать все сообщения с

alias all-errors='for i in `seq 131`; do echo -n "$i: "; strerror $i; done'
7
27.01.2020, 19:30

Другой полезный прием ZSH:

Рассматривайте вывод команды как файл:

emacs =(hg cat -r 100 somefile)

Это открывает старую версию Подвижно прослеженного файла в emacs для выделенного синтаксисом просмотра. Без этого я должен был бы бездельничать с hg revert, hg archive, или явно отправьте hg cat вывод во временный файл.

Конечно, это работает с любой программой, которая открывает файлы и любую программу, которая печатает к стандартному выводу.

6
27.01.2020, 19:30
  • 1
    Можно сделать это в ударе с <() –  ScaryAardvark 11.08.2010, 12:45

ZSH-определенной функцией являются суффиксные псевдонимы, установленные путем предоставления alias -s флаг:

alias -s ext=program

Если данное расширение имеет суффиксный псевдоним, можно выполнить файл с тем расширением непосредственно, и ZSH запустит данную программу и передаст имя файла как аргумент. Таким образом, если вышеупомянутый псевдоним в действительности, эти строки эквивалентны:

/path/to/foo.ext
program /path/to/foo.ext
5
27.01.2020, 19:30
  • 1
    Это - одна вещь, которую я действительно пропустил о Windows..., пока я не понял, что "программа" всегда была emacs, таким образом, я прекратил использовать оболочку для открытия файлов и просто использовал C-x C-f (понятное дело). –  harpo 16.02.2011, 06:11

Одну из моих самых любимых функций ZSH называют каталогами. Можно экспортировать переменную с именем со значением, которое указывает на определенный путь:

export foo=/usr/bin

Теперь можно использовать ~foo в команде для обращения к /usr/bin:

cd ~foo
~foo/ls
cat ~foo/filename
5
27.01.2020, 19:30
  • 1
    , если Ваша подсказка отображает текущий рабочий каталог, названия переменных, будет также использоваться там насколько я помню. –  Andre Holzner 18.06.2011, 19:34

Посмотрите этот вопрос.

Когда Вы работаете ps ax | grep string:

[steve@sage-arch ~]$ ps ax | grep 'openbox'
 3363 ?        Ss     0:00 /usr/bin/openbox
 3382 ?        Ss     0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
 3386 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3388 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3389 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3390 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 5100 pts/0    S+     0:00 grep openbox

последняя строка, содержащая grep немного раздражающие somethings

Можно избавить себя от этого путем выполнения ps ax | grep '[s]tring':

[steve@sage-arch ~]$ ps ax | grep '[o]penbox'
 3363 ?        Ss     0:00 /usr/bin/openbox
 3382 ?        Ss     0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
 3386 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3388 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3389 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3390 ?        S      0:00 /bin/sh /usr/bin/openbox-session

обновление: или просто выполненный pgrep string

4
27.01.2020, 19:30
  • 1
    да, очень полезный. Необходимо заключить openbox в кавычки хотя ('[o]penbox'). Скобки будут работать как своего рода шарик, поэтому если будет openbox в Вашем каталоге (скажите, что Вы находитесь в /usr/bin) удар будет просто использовать openbox, который предотвратит прием grep. –  Rich Homolka 21.10.2010, 22:58
  • Пустая команда : как в

    while :; do :; done
    
  • Расширение фигурной скобки в сочетании с для циклов:

    for c in {1..3}; do :; done
    
  • ! оператор и срывающие операторы || и &&

    [ -d /tmp/dir ] || mkdir /tmp/dir
    
    if ! ping 34.41.34.1; then :; fi
    
  • использование sub оболочки вместо поп/нажатия (пригождается в сценариях),

    ~$ ( cd /tmp; echo $PWD )
    /tmp
    ~$
    
  • отчасти, что - команда type

    ~$ type type
    type is a shell builtin
    ~$ type ls
    ls is aliased to `ls --color=auto'
    ~$ f(){ :; }
    ~$ type f
    f is a function
    f () 
    { 
         :
    
    }
    
  • также очень хороший: здесь-строки

    ~$ cat <<<"here $PWD"
    here /home/yourname
    ~$
    
  • и мой фаворит: перенаправление в списке команд

    { w; ps; ls /tmp; } 2>/dev/null |less
    
4
27.01.2020, 19:30

Если Вы - быстрая машинистка, они пригождаются:

alias grpe='grep --color=tty'
alias gpre='grep --color=tty'
alias rgep='grep --color=tty'
alias gerp='grep --color=tty'

Этот макрос помогает Вам вычислить общие количества столбца вывода: размеры файла, байты, пакеты, все, что необходимо сделать, указывают столбец, который Вы хотите добавить:

total ()
{
        if [ x$1 = x ]; then set `echo 1`; fi
        awk "{total += \$$1} END {print total}"
}

Вы используете его как это, например, без аргументов, это добавляет общее количество первого столбца:

du | total

При обеспечении аргумента он суммирует тот столбец, например, это дает Вам общее количество байтов, используемых всеми файлами C# в/tmp:

ls -l /tmp/*cs | total 5

Иногда Ваша консоль испорчена, потому что Вы случайно просмотрели двоичный файл (кошка/bin/ls, например), можно восстановить терминал с этой функцией оболочки:

restaura ()
{
    perl -e 'print "\e)B";'
}

Мне нравится, когда мой ls использует символы, чтобы отличить класс файлов и также скрыть файлы резервных копий, сгенерированные моим редактором (конец файлов резервных копий с ~ символом):

alias ls='ls -FB'
12
27.01.2020, 19:30
  • 1
    Не забывайте: исказите gerp ='grep - color=tty', я делаю тот все время ;-) –  Robert Swisher 25.08.2010, 01:19
  • 2
    Далеко, поскольку я заинтересован, "быстро" не рассчитывает, если я не точен. Можно также хотеть посмотреть на GREP_COLORS и переменные GREP_OPTIONS. –  Andy Lester 09.10.2010, 01:58
  • 3
    s/fast/sloppy/ –  Josh 14.12.2010, 18:00
  • 4
    я использую reset где Вы используете restaura. –  jmtd 10.05.2011, 16:04

Теги

Похожие вопросы