Это несколько расширяет !!
трюк, упомянутый в этом ответе . На самом деле есть куча связанных с историей команд, о которых обычно забывают (люди, как правило, наносят удар Up100 раз вместо поиска команды, которую, как они знают, они набрали).
- Команда
history
покажет список недавно выполненных команд с указателем события слева
!N
заменит команду, связанную с указателем события N
!-N
заменит N
й последнюю команду; Например, !-1
будет подставлена самая последняя команда, !-2
вторая самая последняя и т. д.
- Как упомянуто в другом ответе,
!!
это сокращение для !-1
быстрой замены последней команды
!string
заменит самую последнюю команду, которая начинается с string
!?string?
заменит самую последнюю команду, которая содержит string
Обозначения слов могут быть добавлены в !
команду истории, чтобы изменить результаты. Двоеточие разделяет обозначения событий и слов, например !!:0
. Указатель события !!
может быть сокращен до просто !
при использовании обозначения слова, поэтому !!:0
эквивалентен !:0
.
!:0
получит команду, которая была выполнена
!:1
получит первый аргумент (и !:2
второй и т. д.)
!:2-3
получит второй и третий аргументы
!:^
это еще один способ получить первый аргумент. !:$
получит последний
!:*
получит все аргументы (но не команду)
Модификаторы также могут быть добавлены в !
команду истории, каждый из которых начинается с двоеточия. Любое число может быть сложено (например !:t:r:p
).
h
- Линия до базового имени файла
t
- только базовое имя файла
r
- Линия до расширения имени файла
e
- только расширение файла
s/search/replacement
- Заменить первое вхождение search
сreplacement
gs/search/replacement
- Заменить все вхождения search
сreplacement
!-#
те. Я использую!string
для запуска последнюю команду, которая начинается со строки, но я обычно завершаю ее сначала (zsh), чтобы убедиться, что я правильно запускаю!N
будет запускать команду ..." - это слишком узкое описание; собственно,!N
будет подставлена команда ...; и так далее для всех описаний в ответе. Более корректно и открывает гораздо больше полезных возможностей! Например, упомянутоеsudo !!
.bash
; в Emacs, чтобы просмотреть историю команд и значений ввода (для Mx или других значений чтения), вместо этого используется Meta-R (Meta-R также используетсяeshell
в Emacs). Поэтому я часто путаю их.bash - вставить последний параметр предыдущей строки
alt-. самая полезная комбинация клавиш, попробуйте и посмотрите, почему-то никто не знает об этом.
нажмите ее снова и снова, чтобы выбрать более старые последние параметры.
замечательно, когда вы хотите сделать что-то еще с аргументом / файлом, который вы использовали только минуту назад.
источник
alt
-.
он будет переходить к предыдущей команде и извлекать из нее последний аргумент. Так что если вы хотите последний аргумент из трех команд назад, просто нажмитеalt
-.
три раза.yank-last-arg
readline, поэтому она должна работать с любой программой, связанной с readline, а не только с BASH или ZSH.Мой любимый
Просто и очень полезно.
Взгляните на этот сайт commandlinefu.com .
Вы также можете посмотреть эти четыре статьи Петериса Круминьша в его блоге.
источник
ascii
программа также полезна. Помимо печати таблицы, он позволяет запрашивать один или несколько отдельных символов.Выполните последнюю команду от имени пользователя root:
источник
Не уверен, что это считается «уловкой», но люди, похоже, очень не знают о стандартных горячих клавишах readline. Особое применение в оболочках:
источник
Ctrl+L
соответствует символу FormFeed ascii. Обычно он перерисовывает экран в текстовых приложениях с помощью экранного окна (например, vim, less, mc и т. Д.). Хорошо, если экран был «загрязнен» каким-то выводом из другой программы.Ctrl+W
разрезать одно слово назад,Alt+F
перейти вперед на одно слово,Alt+B
перейти на одно слово назад в строке. Мне нравится,Ctrl+Y
иShift+Insert
потому что вы можете иметь две скопированные строки. Один с помощьюCtrl+U
(вставьте егоCtrl+Y
), и в то же время вы можете скопировать другое слово (выделить строку) вставить с (Shift+Insert
).CTRL+ Rв BASH для поиска / активации ранее выполненных команд (содержимое ~ / .bash_history).
Это часто очень полезно. Запустив этот псевдоним, вы получите PWD через HTTP (индексированный) через порт 8000:
И поскольку я постоянно запускаю make, слишком быстро набираю и печатаю, эти псевдонимы, вероятно, наиболее часто используются (серьезно):
И, вероятно, мой наиболее часто используемый фрагмент BASH - это простой скрипт, который я называю upload. Я использую его для перетаскивания любого типа контента в мой Linode, и он копирует полученный URL-адрес HTTP в мой буфер обмена (средний щелчок). Очень полезно для вставки материала людям в IRC:
Просто пара. Я могу опубликовать гораздо больше позже, должен вернуться к работе!
источник
alias mk=make
Быстрее печатать и меньше вероятность ошибиться. Или скомпилируйте из своего редактора, используя горячую клавишу ...alias m=make
, или дажеm=make -j6
или подобное - за исключением того, что я уже используюalias m=mutt
☺diff
вывод двух команд без создания временного файла вручную (bash):источник
comm
поскольку требует только файлы, но во многих случаях это пустая трата inode.Довольно простой, но люди, кажется, не знают, возвращает вас к предыдущему каталогу:
источник
cd..
от DOS укоренилась в моей мышечной памяти ...cd
(без аргументов), который приведет вас в ваш домашний каталог.Расширение скобки :
Это позволяет заменить утомительные строки, такие как:
с более коротким экземпляром
некоторые другие применения
Арифметическое Расширение :
источник
foo[123]
, который расширитсяfoo1 foo2 foo3
, но в этом случае они должны быть именами файловОбычно это в моем скрипте запуска (.bashrc, .profile, что угодно)
shopt
Боже мой, проверьте комментарии:Псевдоним, который сохраняет нажатия клавиш:
mkdir
иcd
в него:И последнее, но не менее важное: я разочаровался в запоминании синтаксиса tar, поэтому:
источник
mkcd
только на то, что я называю idmd
. Однако использование «$ @» в качестве аргумента для cd не имеет никакого смысла, так как вы не можете перейти к более чем одному каталогу. «$ @» будет работать для mkdir, но тогда вы по-разному обрабатываете аргументы для mkdir и cd, поэтому я бы предпочелmd () { mkdir -p "$1"; cd "$1" }
Две функции bash, которые спасают меня от множества нажатий клавиш.
Делать автоматически и ls после каждого успешного CD:
Поднимитесь на n уровней:
источник
builtin foo
определив функциюcd
; Я использовалchdir
в своих функциях. Удобноcd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
Поскольку я обычно на полпути в командную строку, прежде чем хочу искать (CTRL-R в bash), у меня есть следующее .bashrc
Это означает, что если я ввожу cd, затем нажимаю вверх / вниз, я вижу все опции, к которым у меня есть cd'd. В основном я использую это для часто используемых dirs. Как "CD W", и я в конечном итоге пройти через все рабочие пространства, которые я использую много.
источник
Одна вещь, которая экономит мне много времени, это команды pushd / popd. Эти ребята позволяют вам создавать стопку каталогов и значительно сокращают количество набираемых текстов:
источник
u
иo
стоять здесь?setopt autopushd
и все изменения каталогов будут выполняться автоматическиscreen
команда . Это в основном сохраняет ваш сеанс командной строки, когда вы вернетесь. Это своего рода менеджер терминалов, как менеджер окон. Таким образом, в одном терминальном сеансе вы можете использовать несколько виртуальных терминалов. Это очень круто.Если вы используете
screen
эту функцию оболочки (поместите в нее.bashrc
), она будет чрезвычайно полезна:после ввода
scr
он проверит, существует ли ваш основной сеанс, и подключится к нему. В противном случае это создаст его.источник
Если вам нужно отредактировать особенно длинную командную строку в bash
откроет его в редакторе ($ EDITOR).
В zsh вы можете получить то же поведение, добавив это в .zshrc:
источник
Если вы быстро печатаете, это пригодится:
Этот макрос помогает вам вычислить итоги столбца вывода: размеры файлов, байты, пакеты, все, что вам нужно сделать, это указать столбец, который вы хотите добавить:
Вы используете это, например, без аргументов, это добавляет итог первого столбца:
Если вы предоставите аргумент, он будет суммировать этот столбец, например, это даст вам общее количество байтов, используемых всеми файлами C # в / tmp:
Иногда ваша консоль портится из-за того, что вы случайно просмотрели двоичный файл (например, cat / bin / ls), вы можете восстановить терминал с помощью этой функции оболочки:
Мне нравится, когда моя ls использует символы, чтобы различать класс файлов, а также скрывать файлы резервных копий, сгенерированные моим редактором (файлы резервных копий заканчиваются символом ~):
источник
s/fast/sloppy/
reset
там, где вы используетеrestaura
.Один из моих любимых, когда я забываю
s
:источник
bindkey -s '\e[12~' "sudo !!\n"
связывания (в данном случае) F2 для запуска этой команды. У меня есть такая привязка, поэтому, когда я что-то запускаю и вижу сообщение об ошибке «Вы забыли« sudo », дурак», я могу просто раздраженно нанести удар F2Если команда принимает ввод stdin, вы можете прочитать ввод из файла с помощью
<filename
. Это может появиться в любом месте команды, поэтому эти строки эквивалентны:Это особенно полезно для grep, так как позволяет поместить выражение в конец строки, поэтому вы можете быстро изменить команду grep, нажав Upбез необходимости прокрутки влево, чтобы пройти имя файла:
источник
<input foo | bar | baz >output
, она не будет работать, если вы попытаетесь смешать некоторые примитивы циклической оболочки, такие какwhile
илиfor
в середине. Так что я сдался и просто поставил его в конце, как это принято.Вы можете использовать
CDPATH
для установки каталога эквивалентPATH
; если вы попытаетесь,cd foo
аfoo
в текущем каталоге его нет, оболочка проверит,CDPATH
ищет ли каждый из каталоговfoo
в них и переключится на первый найденный каталог :источник
Потому что, когда ты не знаешь, где что-то живет, тебе тоже все равно.
источник
which
автоматического вызова , поэтомуvi =scriptname
$(scriptname)
Амперсанд . Это помещает вашу команду в фоновый режим, так что вы можете продолжить печатать.
Работая вместе, и через некоторое время вы видите:
И ваш процесс завершен! Отлично подходит для вещей, где вам не нужно ждать их окончания.
источник
&!
фоновое задание и откажись от него!bash
.nohup
этим выполняет.Завершение вкладки . Насколько плохо было бы отстой, если бы вам пришлось печатать все символы каждого пути?
источник
rm -fr /
. Так что да, завершение Таба очень важно ...ls /usr/lib/game-d*/rott*
rm -rf /
отключен в большинстве систем Linux?Размонтировать последнее подключенное устройство:
!mo
расширяется до последней команды, которая началась сmo
(по крайней мере, в bash). Иногда этоmv
происходит посередине, поэтомуu!m
работать не так часто.источник
У меня есть это в моем .bashrc
И когда у меня есть исходный код HTML в буфер обмена и хочу найти все ссылки, которые я использую
И у меня есть все URL в буфер обмена
У меня тоже есть эта функция
какой размер дисплея (удобочитаемый) и имя файла.
этот псевдоним для показа
с помощью этой функции я могу рассчитать произведение или сумму аргументов.
Это полезная функция, которая разделяет стандартный ввод, разделенный регулярным выражением, и затем объединяет результат.
факторная функция
Эта функция отображает текст вики над DNS
У меня также есть три функции цвета
Эта функция проверяет хэш-файл md5.
это покажет сообщение об ошибке для данного кода
Вы можете распечатать все сообщения с
источник
Еще один полезный трюк ZSH:
Рассматривать вывод команды как файл:
Это открывает старую версию отслеживаемого Mercurial файла в emacs для просмотра с подсветкой синтаксиса. Без этого я бы возиться с
hg revert
,hg archive
или явно отправитьhg cat
вывод во временный файл.Конечно, это работает с любой программой, которая открывает файлы, и любой программой, которая печатает на стандартный вывод.
источник
Специфичной для ZSH функцией является псевдонимы суффиксов, которые устанавливаются с
alias
помощью-s
флага:Если у данного расширения есть псевдоним суффикса, вы можете выполнить файл с этим расширением напрямую, и ZSH запустит данную программу и передаст имя файла в качестве аргумента. Так что, если вышеупомянутый псевдоним действует, эти строки эквивалентны:
источник
Одна из моих самых любимых функций ZSH - это каталоги. Вы можете экспортировать переменную с заданным именем, со значением, указывающим на определенный путь:
Теперь вы можете использовать
~foo
в команде для ссылки на/usr/bin
:источник
Смотрите этот вопрос .
Когда вы бежите
ps ax | grep string
:последняя строка содержит
grep
что-то немного раздражающееВы можете избавиться от этого, запустив
ps ax | grep '[s]tring'
:обновить : или просто запустить
pgrep string
источник
'[o]penbox'
). Скобки будут работать как глобус, так что если в вашем каталоге есть openbox (скажем, вы находитесь/usr/bin
), bash просто использует openbox, что предотвратит трюк с grep.Команда бездействия,
:
как вРасширение раскоса в сочетании с петлями для:
!
оператор и операторы короткого замыкания||
и&&
использование вложенных оболочек вместо pop / push (удобно в скриптах)
вид-о , что-это команда
type
тоже очень приятно: вот-нить
и мой любимый: перенаправление на список команд
источник
Я люблю бросать столько вещей, сколько я могу в мою PS1. Несколько полезных вещей для запоминания:
\e[s
и\e[u
сохранить и отменить сохранение позиции курсора соответственно. Я использую это для создания «информационной панели» в верхней части экрана, длиной в пару строк, которая может вместить больше материала. Пример:Объединить с
alias clear='echo -e "\e[2J\n"'
. Попробуйте!Кроме того,
PROMPT_COMMAND
переменная определяет команду для выполнения перед PS1 каждый раз.Еще одна
bg
команда. Если вы забыли поставить&
в конце команду, просто нажмите ^Zи введитеbg
, и она работает в фоновом режиме.источник
bg
, что когда у меня программа работает в фоновом режиме и случайноfg
нажимаю, я не знаю, как отодвинуть ее назад: DPS1
поэтому я помещаю большую часть того, что хочу, в нижнюю строку экрана ...