Який ваш найулюбленіший трюк командного рядка за допомогою Bash? [зачинено]


156

Ми всі знаємо, як використовувати <ctrl>-Rдля зворотного пошуку через історію, але чи знали ви, що ви можете використовувати <ctrl>-Sдля переадресації пошуку, якщо встановили stty stop ""? Крім того, ви коли-небудь намагалися запустити bind -p, щоб побачити всі перелічені комбінації клавіш? У Mac OS X за замовчуванням їх понад 455.

Який ваш найулюбленіший незрозумілий трюк, ярлик клавіатури чи конфігурація зйомки за допомогою bash?


2
Будь ласка, переформулюйте це, щоб сказати "Який ваш найулюбленіший син" Це дозволяє людям отримувати конкретні відповіді, майже як опитування.
SCdF

> Будь ласка, переформулюйте це, щоб сказати: "Найпопулярніший ваш син". Зроблено.
Мартін Клінке

1
Існує клон StackOverflow для цього самого питання: commandlinefu.com
РКБ

Тільки 232 з цих 455 прив'язок клавіш за замовчуванням роблять щось інше, ніж "самовстановлення" ("введіть цю клавішу"): $ bind -p | grep -v самовстановлення | wc
Ед Браннін

Деякі акуратні речі тут. Але слід зазначити , що далеко не всі з них працюють тільки тоді , коли Баш знаходиться в режимі Emacs ...
Мо

Відповіді:


157

Швидке перейменування / переміщення файлів із суфіксами:
cp /home/foo/realllylongname.cpp{,-old}

Це поширюється на:
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old


12
Дивовижно! Тепер мені потрібно спробувати згадати цю.
Джон Еріксон

9
Тільки щоб зазначити, що для того, щоб зробити зворотний шлях (перехід від .cpp-old до .cpp), ви зробите cp /home/foo/realllylongname.cpp{-old,}
Майкл Екока

Настільки очевидно в ретроспективі, і все ж я не думаю, що пам’ятав би зробити це сам. Дякую!
Zecc

150
cd -

Це еквівалент командного рядка кнопки "назад" (переводить вас до попереднього каталогу, в якому ви були).


6
Я вважаю за краще використовувати pushdі popdпідтримувати стековий каталог.
Алекс М

21
Але "cd -" має перевагу в роботі, навіть якщо ви не пам'ятали використовувати pushd.
Серхіо Акоста

10
Варто зазначити, що "cd" перенесе вас у ваш домашній каталог.
dr-jan

Цікаво, що це не відображається в, man cdабо, cd --helpпринаймні, в моєму.
Халіль Озгюр

135

Ще один улюблений:

!!

Повторює останню команду. Найбільш корисні у формі:

sudo !!

81
це має додаткову перевагу, тому що ви також звучите справді злий на це. "Комп'ютер, роби це". "Доступ заборонено". "ЗРОБИ ЦЕ!!"
nickf

Це не мало відомо! :-)
хойхой

10
Подібні речі ви можете зробити: mkdir testdir; cd !$.. Це працює cd [last word of previous line](на прикладі cd testdir)
08.08

13
Зробіть мені сендвіч судо !!
Кіббі

Якщо вам подобається !!,! $ І! -1: ^ foo ^ bar, ви також "прив'яжіть простір: магія-простір". stackoverflow.com/questions/603696/…
Yoo

81

Моя улюблена - '^ string ^ string2', яка бере останню команду, замінює рядок на string2 і виконує її

$ ehco foo bar baz
bash: ehco: command not found
$ ^ehco^echo
foo bar baz

Посібник з історії командного рядка Bash


Це не жадібно. Як зробити це жадібним?
Альтрей

9
!!:gs/ehco/echo/
andre-r

Друга сторінка цього посібника є важливою
jmoz

1
@ andre-r: !!:gs/ehco/echo/виконує глобальний пошук та заміну на останню команду (надіслати !!в stackoverflow.com/questions/68372/… ). Це не рівнозначно тому, ^ehco^echoщо просто замінює один екземпляр "ehco" - точнішою була б відповідь !!:s/ehco/scho.
Iceland_jack

64

перейменувати

Приклад:

$ ls
this_has_text_to_find_1.txt
this_has_text_to_find_2.txt
this_has_text_to_find_3.txt
this_has_text_to_find_4.txt

$ rename 's/text_to_find/been_renamed/' *.txt
$ ls
this_has_been_renamed_1.txt
this_has_been_renamed_2.txt
this_has_been_renamed_3.txt
this_has_been_renamed_4.txt

Так корисно


3
Нічого собі, я був дебілом всі ці роки, використовуючи базове ім'я, mv та {} трюки для цього. / передня частина.
Грегг Лінд

7
перейменування не є bash / readline, як інші публікації.
гармати

1
zmv від zsh розповсюдження набагато краще в більшості випадків.
ZyX

util-linux-ng теж має команду перейменування, і це не так, як зазначено у цій відповіді. Описана тут команда насправді mmv .
Крістіан Цюпіту

60

Я шанувальник !$, !^і !*розширюються, повертаючись, з останнього поданого командного рядка: останній елемент, перший не командний елемент і всі не командні елементи. На розум (Зверніть увагу, що оболонка спочатку виводить команду):

$ echo foo bar baz
foo bar baz
$ echo bang-dollar: !$ bang-hat: !^ bang-star: !*
echo bang-dollar: baz bang-hat: foo bang-star: foo bar baz
bang-dollar: baz bang-hat: foo bang-star: foo bar baz

Це дуже зручно , коли ви, скажімо ls filea fileb, і хочете редагувати один з них: vi !$або обидва з них: vimdiff !*. Він також може бути узагальнений до "цього nаргументу" так:

$ echo foo bar baz
$ echo !:2
echo bar
bar

І, нарешті, з колійними іменами, ви можете отримати на частину шляху, приєднуючи :hі :tдо будь-якого з вищевказаного expandos:

$ ls /usr/bin/id
/usr/bin/id
$ echo Head: !$:h  Tail: !$:t
echo Head: /usr/bin Tail: id
Head: /usr/bin Tail: id

'ехо !! 2' не працювало для мене, і з наступного допису я побачив, що я думаю, що це повинно бути: 'ехо!: 2'
user13060

8
додайте "bind Space: magic-space" .bashrc та будь-яке! комбінація буде автоматично розширена, коли ви потрапите на пробіл.
Yoo

47

Під час виконання команд іноді мені хочеться запустити команду з попередніми аргументами. Для цього ви можете скористатись цим ярликом:

$ mkdir /tmp/new
$ cd !!:*

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

for file in *.wav; do lame "$file" "$(basename "$file" .wav).mp3" ; done;

Налаштування параметрів історії командного рядка в моєму .bash_login (або .bashrc) дійсно корисно. Далі йде кадр налаштувань, які я використовую на своєму Macbook Pro.

Налаштування наступного робить bash стиранням повторюваних команд у вашій історії:

export HISTCONTROL="erasedups:ignoreboth"

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

export HISTFILESIZE=500000
export HISTSIZE=100000

Інша річ, яку я роблю, - це ігнорувати деякі команди з моєї історії. Не потрібно пам'ятати команду виходу.

export HISTIGNORE="&:[ ]*:exit"

Ви обов'язково хочете встановити йогододаток. В іншому випадку bash перезаписує вашу історію під час виходу.

shopt -s histappend

Ще один варіант, який я використовую - cmdhist. Це дозволяє зберігати багаторядкові команди в історію як одну команду.

shopt -s cmdhist

Нарешті, у Mac OS X (якщо ви не використовуєте режим vi), ви захочете скинути <CTRL> -S від зупинки прокрутки. Це заважає Bash мати можливість інтерпретувати його як пошук вперед.

stty stop ""

6
Я знаходжу "Alt-". набагато краще, ніж "!!: *" для повторення останнього слова останньої команди.
Вайденрінде

Додавання для histroy: 1. регулярно зберігайте історію (з -a, якщо у вас відкрито кілька оболонок одночасно) export PROMPT_COMMAND = "історія -a" 2. Псевдонім для читання історії з інших оболонок. псевдонім - h = 'історія -n; історія | grep '
Weidenrinde

експортувати HISTIGNORE = "[] *" не потрібно, так як ваш HISTCONTROL = ignoreboth повинен робити те саме
Weidenrinde

Ще одна приємна історія: експорт HISTTIMEFORMAT = "% Y-% m-% d% H:% M:% S:"
Weidenrinde

Щоб зберегти кілька натискань клавіш на "cd !!: *", спробуйте "cd! $". "! $" Буде трактуватися як останній аргумент вашої останньої команди.
Тім Стюарт

43

Як перелічити лише підкаталоги в поточному?

ls -d */

Це простий трюк, але ти не знаєш, скільки часу мені потрібно, щоб знайти його!


2
Відмінно! Всі ці роки я міг придумати alias lsd='ls -F | grep --color /', що перелічив би те саме, але в більш кульгавому вигляді. Однак у ньому буде вказано по одному dir на рядок для зручності розбору. Я змінив вашу команду так само:ls -d1 */
Артем Русаковський

як це працює? "ls -d" списки просто. (що дивно), але "ls -d * /" працює.
Yoo

1
Це трохи хитро ... "ls -d" схоже на "ls -d ./", а "ls -d /" на "ls -d ./*/". Перемикач '-d' встановлює 'ls' tu список лише записів каталогів, але якщо ви не даєте йому жодного параметра, він використовує поточний каталог як параметр, тому у нього є * тільки "." каталог до списку ...
edomaur

1
Я не можу повірити, що я ніколи цього не відкривав. Чудова порада.
Нік Діксон

Ні слова, просто ух !!! :)
dimba

41

ESC.

Вставляє останні аргументи з вашої останньої команди bash. Це корисно більше, ніж ви думаєте.

cp file /to/some/long/path

cd ESC.


Це працює для мене (баш). Зауважте, що ви натискаєте клавішу esc, а потім клавішу періоду. Ні дефісу, ні нічого.
Howler

9
Також alt-. те саме.
Марк Бейкер

Так, це лише Баш. Але <esc> (або Alt- або Meta-) _ пов'язаний з тією ж функцією, і <esc> -_ також працює у vi-mode.
Нік Діксон

@hendry в моєму zsh це насправді працює. Можливо, ви використовуєте режим vi?
ZyX

Використовуйте тег kbd для хітів клавіатури: <kbd> ESC </kbd> (Але не грає дуже добре разом із форматуванням коду / відступом).
користувач невідомий

36

Звичайно, ви можете " diff file1.txt file2.txt", але Bash підтримує підстановку процесу , яка дозволяє diffвиводити команди.

Наприклад, скажімо, що я хочу переконатися, що мій сценарій дає мені очікуваний результат. Я можу просто загорнути свій скрипт в <() і подати його, diffщоб отримати швидкий і брудний тест блоку:

$ cat myscript.sh
#!/bin/sh
echo -e "one\nthree"
$
$ ./myscript.sh 
one
three
$
$ cat expected_output.txt
one
two
three
$
$ diff <(./myscript.sh) expected_output.txt
1a2
> two
$

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

$ diff <(ssh server1 'rpm -qa | sort') <(ssh server2 'rpm -qa | sort')
241c240
< kernel-2.6.18-92.1.6.el5
---
> kernel-2.6.18-92.el5
317d315
< libsmi-0.4.5-2.el5
727,728d724
< wireshark-0.99.7-1.el5
< wireshark-gnome-0.99.7-1.el5
$

Є більше прикладів у Додатковому посібнику для сценаріїв Bash за адресою http://tldp.org/LDP/abs/html/process-sub.html .


35

Моя улюблена команда - "ls -thor"

Він викликає силу богів перелічити останні нещодавно змінені файли у зручному для читання форматі.


6
Нагадує мені іншого, абсолютно марно , але і смішно команди: ls -bart -simpson -ruls. S, ICNR
filiprem

'ls -tor' також корисний, оскільки ви можете швидко знайти великі файли. А також, оригінальний шведський правопис імені бога грому насправді - «Тор».
дала

У датській мові ви можете використовувати ls -lortдатське слово "лайно". Пропускаючи будь-які групи і не отримуючи гніву валхаль :)
Jesper Rønn-Jensen

1
можна також сказати, що це "ls -lotr", який, мабуть, має щось спільне з Толкіеном та Lord Of The Rings :)
ADEpt

28

Більше новинки, але розумно ...

10 найпопулярніших команд:

$ history | awk '{print $2}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -nr | head

Вибірка зразка:

 242 git
  83 rake
  43 cd
  33 ss
  24 ls
  15 rsg
  11 cap
  10 dig
   9 ping
   3 vi

1
Ось більш коротка, швидша версія:history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
Призупинено до подальшого повідомлення.

25

^ R зворотний пошук. Натисніть ^ R, введіть фрагмент попередньої команди, яку ви хочете зіставити, і натисніть ^ R, поки не знайдете потрібну. Тоді мені не доведеться згадувати нещодавно використані команди, які ще є в моїй історії. Не виключно bash, але також: ^ E для кінця рядка, ^ A для початку рядка, ^ U і ^ K для видалення до і після курсору відповідно.


2
Я ніколи не можу згадати ^ U чомусь. Чи не існує також ярлика видалити слово для видалення?
hoyhoy

1
^ W видаляє слово перед курсором. (Не соромтесь редагувати свою відповідь на це.)
Джон Еріксон

2
^ R настільки корисний, що його згадували у питанні :)
Марк Бейкер

20

У мене часто є псевдоніми для vi, ls тощо, але іноді ви хочете уникнути псевдоніма. Просто додайте зворотну косу рису в команду попереду:

Наприклад:

$ alias vi=vim
$ # To escape the alias for vi:
$ \vi # This doesn't open VIM

Класно, чи не так?


Ви також можете запустити command—дивіться SHELL BUILTIN COMMANDSв посібнику Bash.
Iceland_jack

17

Ось кілька налаштувань конфігурації:

~/.inputrc:

"\C-[[A": history-search-backward
"\C-[[B": history-search-forward

Це працює так само, як, ^Rале замість цього використовуються клавіші зі стрілками. Це означає, що я можу набрати (наприклад), cd /media/а потім натиснути стрілку вгору, щоб перейти до останнього, що я хотів cdби знаходитись всередині /media/папки.

(Я використовую термінал Gnome, можливо, вам доведеться змінити коди епіляції для інших емуляторів терміналів.)

Завершення баша також неймовірно корисне, але це набагато більш тонке доповнення. В ~/.bashrc:

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

Це дозволить заповнити вкладку за програмою (наприклад, спроба заповнення вкладки, коли командний рядок починається з, evinceпокаже лише ті файли, які може відкрити вікно, а також параметри командного рядка).

Чудово працює з цим також у ~/.inputrc:

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on

+1 bash_completion є приголомшливим
передчуття

На Mac, пошук історії за допомогою клавіш зі стрілками можна ввімкнути за допомогою: bind '"\ e [A"': прив'язка історії-пошуку-назад '"\ e [B"': історія-пошук вперед
Asmus

17

Я багато використовую:

:pМодифікатор надрукувати результат історії. Напр

!!:p

Друкує останню команду, щоб ви могли перевірити її правильність, перш ніж запустити її знову. Просто введіть його !!для виконання.

Аналогічно:

!?foo?:p

Здійснить пошук у вашій історії за останньою командою, що містила рядок 'foo', і надрукує її.

Якщо вам не потрібно друкувати,

!?foo

здійснює пошук і виконує його відразу.


2
Замість використання: p, ви також можете використовувати магічний простір: stackoverflow.com/questions/603696/…
Yoo

розширити історичні елементи керування без запуску конфігураційного магічного простору у bind Space:magic-space # !pin<space>
bashrc

16

У мене є секретна зброя: снаряд.

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

Те, що мені подобається (але я трохи обманюю, оскільки використовую той факт, що Python зараз встановлений у більшості Unix-систем):

alias webshare='python -m SimpleHTTPServer'

Тепер, коли ви набираєте "webshare", поточний каталог буде доступний через порт 8000. Дуже приємно, коли ви хочете ділитися файлами з друзями в локальній мережі без ключа USB або віддаленого dir. Потокове відео та музика також працюватимуть.

І звичайно класична вилка бомба, яка абсолютно марна, але все ж дуже весела:

$ :(){ :|:& };:

Не спробуйте цього на виробничому сервері ...


Я думаю, я не повинен webshare /
Yoo

Я думаю, ви можете спростити команду до python -m SimpleHTTPServer(якщо мені не вистачає чогось фантазійного в оригінальній команді
Jesper Rønn-Jensen,

Мех. На виробничому сервері вилка бомба просто потрапить в ОС; є обмеження щодо кількості процесів, які може створити будь-який користувач.
Дональні стипендіати

3
@Donal: Ви повинні спробувати і повідомити про свої висновки.
Майкл Фукаракіс

12

Ви можете використовувати команду watch разом з іншою командою для пошуку змін. Прикладом цього було тестування маршрутизатора, і я хотів отримати оновлені номери таких матеріалів, як співвідношення сигнал / шум тощо.

watch --interval=10 lynx -dump http://dslrouter/stats.html

Команда спостерігати дійсно класна. Я вперше прочитав про це в книзі "Хакі Linux Server" близько п'яти років тому. Хто знав, що воно існує?
hoyhoy

11
Що у світі "спостереження" стосується башти?
Артем Русаковський

11
type -a PROG

щоб знайти всі місця, де доступний PROG, зазвичай десь у ~ / bin, а не в / usr / bin / PROG, які, можливо, очікували.


1
Він також скаже вам, чи це функція чи псевдонім. Якщо він у кількох місцях у вашому, PATHвін покаже кожне з них.
Призупинено до подальшого повідомлення.

11

Мені подобається будувати команди з луною і передавати їх оболонці:

$ find dir -name \*~ | xargs echo rm
...
$ find dir -name \*~ | xargs echo rm | ksh -s

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


1
Можливо, ви хочете використовувати find -print0 та xargs -0, щоб уникнути проблем із файлами та папками з білими пробілами.
neu242

Або уникайте створення файлів і папок з білими пробілами в їх назвах. ;-) Очевидно, якщо ви працюєте з генерованими користувачем іменами, ваша пропозиція життєво важлива.
Джон Ерісон

4
Чому б ви додали "| ksh -s", коли ви могли просто видалити "відлуння"?
Yoo

Не потрібно $ find dir -name \\*~ -exec rm {} +
трудитися

10

Завантажуючи великий файл, я часто:

while ls -la <filename>; do sleep 5; done

І тоді просто ctrl + c, коли я закінчую (або якщо lsповертається не нульовим). Це схоже на watchпрограму, але вона замість цього використовує оболонку, тому працює на платформах без watch.

Ще один корисний інструмент - netcat, або nc. Якщо ти зробиш:

nc -l -p 9100 > printjob.prn

Тоді ви можете налаштувати принтер на іншому комп'ютері, але замість цього використовувати IP-адресу комп'ютера під управлінням netcat. Коли завдання друку буде надіслано, його отримує комп'ютер під управлінням netcat та завантажується в нього printjob.prn.


Чому це, а не, наприклад wget,?
porges

Спробуйте watch ls -la <filename>(використовуйте -n5, якщо вам не подобається за замовчуванням 2 секунди).
Тед Персіваль

1
@ Ted, watchдоступний не на всіх платформах, хоча, як і Solaris, Mac OS X тощо. @Porges, не впевнений, що ти маєш на увазі. Чи може Wget також слухати на порту?
dreamlax


10

Один з бажаних способів навігації, коли я використовую декілька каталогів у широко відокремлених місцях ієрархії дерев, - це використовувати acf_func.sh (перелічено нижче). Після визначення, ви можете зробити

cd -

щоб побачити список останніх каталогів із числовим меню

cd -2

перейти до другої за останнім каталогу.

Дуже простий у використанні, дуже зручний.

Ось код:

# do ". acd_func.sh"
# acd_func 1.0.5, 10-nov-2004
# petar marinov, http:/geocities.com/h2428, this is public domain

cd_func ()
{
  local x2 the_new_dir adir index
  local -i cnt

  if [[ $1 ==  "--" ]]; then
    dirs -v
    return 0
  fi

  the_new_dir=$1
  [[ -z $1 ]] && the_new_dir=$HOME

  if [[ ${the_new_dir:0:1} == '-' ]]; then
    #
    # Extract dir N from dirs
    index=${the_new_dir:1}
    [[ -z $index ]] && index=1
    adir=$(dirs +$index)
    [[ -z $adir ]] && return 1
    the_new_dir=$adir
  fi

  #
  # '~' has to be substituted by ${HOME}
  [[ ${the_new_dir:0:1} == '~' ]] && the_new_dir="${HOME}${the_new_dir:1}"

  #
  # Now change to the new dir and add to the top of the stack
  pushd "${the_new_dir}" > /dev/null
  [[ $? -ne 0 ]] && return 1
  the_new_dir=$(pwd)

  #
  # Trim down everything beyond 11th entry
  popd -n +11 2>/dev/null 1>/dev/null

  #
  # Remove any other occurence of this dir, skipping the top of the stack
  for ((cnt=1; cnt <= 10; cnt++)); do
    x2=$(dirs +${cnt} 2>/dev/null)
    [[ $? -ne 0 ]] && return 0
    [[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
    if [[ "${x2}" == "${the_new_dir}" ]]; then
      popd -n +$cnt 2>/dev/null 1>/dev/null
      cnt=cnt-1
    fi
  done

  return 0
}

alias cd=cd_func

if [[ $BASH_VERSION > "2.05a" ]]; then
  # ctrl+w shows the menu
  bind -x "\"\C-w\":cd_func -- ;"
fi

10

Розгорніть складні лінії, перш ніж натиснути на жахливий клавішу

  • Alt+ Ctrl+ e- оболонка расшир рядки (може знадобитися використання Esc, Ctrl+ eна клавіатурі)
  • Ctrl+ _- скасувати
  • Ctrl+ x, *- глобус-розгорнути-слово

$ echo !$ !-2^ * Alt+ Ctrl+ e
$ echo aword someotherword * Ctrl+ _
$ echo !$ !-2^ * Ctrl+ x, *
$echo !$ !-2^ LOG Makefile bar.c foo.h

& c.


+1, я завжди боюся натискання Enter:)
Жоао Портела

Я нічого з цього не знав. Undo - вбивця. Добре підходить для редагування командного рядка.
Філіп А.

9

Я завжди був частковим до:

ctrl-E # move cursor to end of line
ctrl-A # move cursor to beginning of line

Я також використовую shopt -s cdable_vars, тоді ви можете створювати bash змінні для загальних каталогів. Отже, для вихідного дерева моєї компанії я створюю купу змінних на зразок:

export Dcentmain="/var/localdata/p4ws/centaur/main/apps/core"

то я можу перейти до цього каталогу за допомогою cd Dcentmain.


Дім і Кінець роблять те саме, що і crtl-A і ctrl-E.
davidfg4

Це допомагає на ноутбуках Mac, у яких немає ключів додому та кінця.
jamesh

На жаль, ctrl-A також є ключем для виходу screenза замовчуванням. Я перезавантажую його до ctrl-X у своєму .screenrc, але тоді я не є користувачем emacs.
системна ПАУЗА

Дещо пов'язаний із параметром cdable_vars, є також змінна середовища CDPATH. Але це працює інакше, тому що ви встановлюєте батьківський каталог, подібно до PATH. За допомогою cdable_vars ви отримуєте більше контролю.
Zecc

1
Більше для списку ярликів: CTRL + K, щоб видалити все від курсору до кінця рядка, CTRL + U, щоб видалити все перед курсором, ALT + F / ALT + B для переміщення одного слова вперед / назад (або CTRL + ліва стрілка / CTRL + стрілка праворуч). +1 для cdable_vars!
Філіп А.

8

pbcopy

Це копіюється в буфер обміну системи Mac. Ви можете передавати команди до нього ... спробуйте:

pwd | pbcopy


NB! Це специфічна для Mac команда.
дала

Це не: alias pbcopy='xsel --clipboard --input' і alias pbpaste='xsel --clipboard --output'
wawawawa


7

Використовуючи "set -o vi" з командного рядка, а краще, в .bashrc, переводить вас у режим редагування vi в командному рядку. Ви починаєте в режимі "вставлення", щоб ви могли вводити та повертати назад як звичайне, але якщо ви зробите "велику" помилку, можете натиснути клавішу esc, а потім використовувати "b" і "f" для переміщення, як це робиться в vi. cw, щоб змінити слово. Особливо корисно після того, як ви створили команду історії, яку потрібно змінити.


7

Як і багато хто вище, мій улюблений момент - натискання клавіші [alt]. (Alt і "." Клавіші разом) це те саме, що $! (Вставляє останній аргумент з попередньої команди) за винятком того, що це негайне і для мене простіше набрати. (Просто не можна використовувати в сценаріях)

наприклад:

mkdir -p /tmp/test/blah/oops/something
cd [alt].

Спробуйте також комбінувати його з Alt- [0-9] (натисніть першу комбінацію, потім відпустіть, потім другу). наприклад, якщо останньою командою було "mv foo bar", то "Alt-0 Alt-." дає "mv", "Alt-1 Alt-." дає "foo", "Alt-2 Alt-." і базовий Alt-. обидва дають «бар» тощо.
Сем Стоукс

1
Спробуйте також натиснути Alt-. більше одного разу (або натисніть Alt, утримуйте його там, натисніть крапку багато разів, а потім відпустіть Alt) Це схоже на натискання Ctrl-R не один раз.
Yoo

7

З'єднайте кілька команд разом за допомогою команди && :

./run.sh && tail -f log.txt

або

kill -9 1111 && ./start.sh

1
якщо один не вдасться, інша команда не буде виконана (невдало швидко, як у програмуванні)
Фредерік Морін

1
Протилежним є використання логічного або '||' у якій права сторона буде виконана, лише якщо ліва сторона помилкова. Приклад: <code> command_1 || command_2 </code>
дала
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.