Мы все знаем, как использовать <ctrl>-R
для обратного поиска в истории, но знаете ли вы, что вы можете использовать <ctrl>-S
для пересылки поиска, если вы установите stty stop ""
? Кроме того, вы когда-нибудь пробовали запустить bind -p, чтобы увидеть все ваши сочетания клавиш в списке? В Mac OS X по умолчанию более 455.
Какой ваш самый любимый неясный трюк, сочетание клавиш или конфигурация магазина с использованием bash?
bash
command-line
Роберт Харви
источник
источник
Ответы:
Быстрое переименование / перемещение файлов с суффиксами:
cp /home/foo/realllylongname.cpp{,-old}
Это расширяется до:
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old
источник
Это командная строка, эквивалентная кнопке «Назад» (переводит вас в предыдущий каталог, в котором вы находились).
источник
pushd
иpopd
поддерживать стек каталогов самостоятельно.man cd
или,cd --help
(по крайней мере, мой).Еще один любимый:
Повторяет вашу последнюю команду. Самое полезное в виде:
источник
mkdir testdir; cd !$
.. Это работаетcd [last word of previous line]
(в примереcd testdir
)Мой фаворит - '^ string ^ string2', который принимает последнюю команду, заменяет строку на string2 и выполняет ее
Руководство по истории командной строки Bash
источник
!!:gs/ehco/echo/
!!:gs/ehco/echo/
выполняет глобальный поиск и замену на последней команды (совещается!!
в stackoverflow.com/questions/68372/... ). Это не эквивалентно тому,^ehco^echo
что просто заменяет один экземпляр «ehco» - более точный ответ будет!!:s/ehco/scho
.переименование
Пример:
Так полезно
источник
Я фанат
!$
,!^
и!*
expandos, возвращаясь из самых последних представлены в командной строке: последний пункт, первый пункт без команды, и все непищевых команды. Для остроумия (обратите внимание, что оболочка сначала выводит команду):Это очень удобно , когда вы, скажем
ls filea fileb
, и хотите редактировать один из них:vi !$
или оба из них:vimdiff !*
. Его также можно обобщить до «n
аргумента th» следующим образом:Наконец, с путевыми именами вы можете добраться до частей пути, добавив
:h
и:t
к любому из вышеупомянутых расширений:источник
При выполнении команд иногда я хочу запустить команду с предыдущими аргументами. Для этого вы можете использовать этот ярлык:
Иногда вместо использования find я разрываю однострочный цикл, если мне нужно выполнить несколько команд в списке файлов.
Настройка параметров истории командной строки в моем .bash_login (или .bashrc) действительно полезна. Ниже приведен список настроек, которые я использую на своем Macbook Pro.
Установка следующего делает bash erase дублирующимися командами в вашей истории:
Я также значительно увеличил размер своей истории. Почему нет? Кажется, это не замедляет работу современных микропроцессоров.
Еще одна вещь, которую я делаю, - игнорирую некоторые команды из моей истории. Не нужно помнить команду выхода.
Вы определенно хотите установить гистапенд. В противном случае, bash перезаписывает вашу историю при выходе.
Другой вариант, который я использую, это cmdhist. Это позволяет сохранять многострочные команды в истории как одну команду.
Наконец, в Mac OS X (если вы не используете режим vi) вам нужно сбросить <CTRL> -S с остановки прокрутки. Это не позволяет bash интерпретировать его как прямой поиск.
источник
Как вывести список только подкаталогов в текущем?
Это простой трюк, но вы не знаете, сколько мне нужно времени, чтобы найти его!
источник
alias lsd='ls -F | grep --color /'
, что перечисляло бы то же самое, но в более отстойной форме. Тем не менее, для простоты синтаксического анализа будет указываться один каталог в строке. Я изменил вашу команду, чтобы сделать то же самое:ls -d1 */
ESC.
Вставляет последние аргументы из вашей последней команды bash. Это пригодится больше, чем вы думаете.
CD ESC.
источник
Конечно, вы можете "
diff file1.txt file2.txt
", но Bash поддерживает подстановку процессов , что позволяет вамdiff
выводить команды.Например, скажем, я хочу убедиться, что мой скрипт дает мне ожидаемый результат. Я могу просто обернуть свой скрипт в <() и передать его,
diff
чтобы получить быстрый и грязный юнит-тест:В качестве другого примера, скажем, я хочу проверить, установлен ли на двух серверах одинаковый список RPM. Вместо того, чтобы подключаться к каждому серверу, записывать каждый список RPM в отдельные файлы и выполнять операции
diff
над этими файлами, я могу просто сделать этоdiff
с моей рабочей станции:Дополнительные примеры приведены в Руководстве по расширенному написанию сценариев на http://tldp.org/LDP/abs/html/process-sub.html .
источник
Моя любимая команда "ls -thor"
Это вызывает силу богов перечислять самые последние измененные файлы в удобном для чтения формате.
источник
ls -bart -simpson -ruls
. S, ICNRls -lort
что является датским словом «дерьмо». Пропускать любые группы и не получать гнев Вальхала :)Еще новинка, но она умная ...
Топ 10 используемых команд:
Пример вывода:
источник
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
^ R обратный поиск. Нажмите ^ R, введите фрагмент предыдущей команды, которую хотите сопоставить, и нажимайте ^ R, пока не найдете нужную команду. Тогда мне не нужно помнить недавно использованные команды, которые все еще в моей истории. Не только bash, но также: ^ E для конца строки, ^ A для начала строки, ^ U и ^ K для удаления до и после курсора соответственно.
источник
У меня часто есть псевдонимы для vi, ls и т. Д., Но иногда вы хотите избежать псевдонима. Просто добавьте обратную косую черту к команде впереди:
Например:
Круто, не правда ли?
источник
command
РуководствоSHELL BUILTIN COMMANDS
по Bash.Вот несколько настроек:
~/.inputrc
:Это работает так же, как и
^R
с использованием клавиш со стрелками. Это означает, что я могу напечатать (например), аcd /media/
затем нажать стрелку вверх, чтобы перейти к последнему пункту, который яcd
сделал внутри/media/
папки.(Я использую Gnome Terminal, возможно, вам придется изменить коды выхода для других эмуляторов терминала.)
Завершение Bash также невероятно полезно, но это гораздо более тонкое дополнение. В
~/.bashrc
:Это активирует завершение табуляции для каждой программы (например, попытка завершить табуляцию, когда начинается командная строка,
evince
покажет только те файлы, которые могут быть открыты, а также опции командной строки для завершения табуляции).Хорошо работает с этим также в
~/.inputrc
:источник
Я часто использую следующее:
:p
Модификатор напечатать результат истории. НапримерНапечатает последнюю команду, чтобы вы могли проверить ее правильность, прежде чем запускать ее снова. Просто войдите,
!!
чтобы выполнить это.В том же духе:
Будет искать в вашей истории самую последнюю команду, содержащую строку 'foo', и печатать ее.
Если вам не нужно печатать,
выполняет поиск и выполняет его сразу.
источник
bind Space:magic-space # !pin<space>
У меня есть секретное оружие: ракушка.
Есть тысячи умных советов, классных трюков и эффективных рецептов, которые в большинстве случаев помещаются на одной строке.
Тот, который мне нравится (но я немного обманываю, поскольку использую тот факт, что Python теперь установлен в большинстве систем Unix):
Теперь каждый раз, когда вы набираете «webshare», текущий каталог будет доступен через порт 8000. Очень удобно, когда вы хотите поделиться файлами с друзьями в локальной сети без USB-ключа или удаленного каталога. Потоковое видео и музыка тоже будут работать.
И, конечно, классическая вилочная бомба, которая совершенно бесполезна, но все же доставляет массу удовольствия:
Не пытайтесь сделать это на производственном сервере ...
источник
python -m SimpleHTTPServer
(если я неВы можете использовать команду watch вместе с другой командой для поиска изменений. Примером этого является то, что когда я тестировал свой маршрутизатор, я хотел получить последние цифры по таким вещам, как отношение сигнал / шум и т. Д.
источник
чтобы найти все места, где доступен PROG, обычно где-то в ~ / bin, а не в / usr / bin / PROG, чего можно было ожидать.
источник
PATH
он покажет каждое из них.Мне нравится создавать команды с помощью echo и передавать их в оболочку:
Зачем? Потому что это позволяет мне посмотреть, что будет сделано, прежде чем я это сделаю. Таким образом, если у меня есть ужасная ошибка (например, удаление моей домашней директории), я могу ее перехватить до того, как это произойдет. Очевидно, это наиболее важно для разрушительных или безвозвратных действий.
источник
$ find dir -name \\*~ -exec rm {} +
При загрузке большого файла я часто делаю:
А затем просто Ctrl + C, когда я закончил (или если
ls
возвращает ненулевое значение). Это похоже наwatch
программу, но вместо этого она использует оболочку, поэтому работает на платформах безwatch
.Другим полезным инструментом является netcat, или
nc
. Если вы делаете:Затем вы можете настроить принтер на другом компьютере, но вместо этого использовать IP-адрес компьютера, на котором работает netcat. Когда задание на печать отправляется, оно принимается компьютером, на котором запущен netcat, и помещается в него
printjob.prn
.источник
wget
?watch ls -la <filename>
(используйте -n5, если вам не нравится значение по умолчанию 2 секунды).watch
доступен не на всех платформах, таких как Solaris, Mac OS X и т. Д. @Porges, не знаю, что вы имеете в виду. Может ли wget также прослушивать порт?pushd
иpopd
почти всегда пригодитсяисточник
Один из предпочтительных способов навигации, когда я использую несколько каталогов в совершенно разных местах в древовидной иерархии, - это использование acf_func.sh (указан ниже). После определения вы можете сделать
CD --
чтобы увидеть список последних каталогов, с числовым меню
кд -2
перейти ко второму последнему каталогу.
Очень прост в использовании, очень удобно.
Вот код:
источник
Расширять сложные линии, прежде чем попасть в страшный ввод
$
echo !$ !-2^ *
Alt+ Ctrl+ e$
echo aword someotherword *
Ctrl+ _$
echo !$ !-2^ *
Ctrl+ x, *$
echo !$ !-2^ LOG Makefile bar.c foo.h
& Гр.
источник
Enter
:)Я всегда был неравнодушен к:
Я также использую
shopt -s cdable_vars
, тогда вы можете создавать переменные bash для общих каталогов. Итак, для дерева исходных текстов моей компании я создаю несколько переменных, таких как:тогда я могу перейти в этот каталог
cd Dcentmain
.источник
screen
по умолчанию. Я переназначаю его в ctrl-X.screenrc
, но тогда я не пользователь emacs.pbcopy
Это копирует в системный буфер обмена Mac. Вы можете передать ему команды ... try:
pwd | pbcopy
источник
alias pbcopy='xsel --clipboard --input'
иalias pbpaste='xsel --clipboard --output'
источник
history 10
вместоhistory | tail -10
(что должно бытьtail -n 10
кстати, поскольку этот синтаксис устарел).Использование 'set -o vi' из командной строки или, что лучше, в .bashrc переводит вас в режим редактирования vi в командной строке. Вы начинаете в режиме «вставки», так что вы можете печатать и возвращать, как обычно, но если вы допустили «большую» ошибку, вы можете нажать клавишу esc, а затем использовать «b» и «f» для перемещения, как в vi. CW, чтобы изменить слово. Особенно полезно после того, как вы вызвали команду истории, которую хотите изменить.
источник
Как и многие другие, моим любимым является нажатие клавиши [alt]. (Клавиши Alt и «.» Вместе) это то же самое, что $! (Вставляет последний аргумент из предыдущей команды), за исключением того, что он является немедленным и для меня легче набрать. (Просто не может быть использовано в сценариях)
например:
источник
Объедините несколько команд, используя команду && :
или
источник