Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$ kill -9 $$/etc/env.d/99local):HISTFILE="/dev/null"
и с тех пор было может пяток случаев, когда я пару секунд жалел, что нет истории команд. Фокус в том, что во-первых история по-прежнему доступна пока не закроется терминал, а во-вторых стандартный подход с сохранением истории в файле не очень-то хорошо работает, когда одновременно открыто несколько терминалов (а у меня штатно открыто всегда 15). Делал я это из соображений безопасности, но был поражён, насколько слабо это отразилось на юзабилити.export HISTIGNORE=”&:ls:[bf]g:exit: cd \”\`*: PROMPT_COMMAND=’*”
а у меня штатно открыто всегда 15
а во-вторых стандартный подход с сохранением истории в файле не очень-то хорошо работает, когда одновременно открыто несколько терминалов
history-beginning-search-backward (или просто оставить функцию по‐умолчанию), то независимо от того, была ли помещена предыдущая команда в историю или нет, стрелка вверх её покажет. Но если команда в историю не была помещена, то любая следующая команда сделает невозможным вызов предыдущей при нажатии вверх. К примеру, <Space>echo I do not want this in history<CR><Up> покажет <Space>echo I do not want this in history, тогда как <Space>echo …<CR><CR><Up> — уже нет (из‐за двух <CR>).function zshaddhistory()
{
emulate -L zsh
if (( ${+_HISTLINE} )) ; then
print -sr -- "${_HISTLINE}"
unset _HISTLINE
elif (( 0x20==#1 )) ; then
return 1
else
print -sr -- "${1%%$'\n'}"
fi
fc -p
}. Она же ответственна за подмену истории в некоторых случаях (именно для этого здесь находится первое условие с _HISTLINE).Запуск последней команды под root.Главное – вовремя вспомнить, что там было.
<пробел>команда
bindkey '^P' history-beginning-search-backwardто можно не перебирать всю историю в поисках какой-то опции для команды, а ввести несколько первых букв и нажать Ctrl+P -> будут подставляться только те команды, что начинаются с этих букв.
bindkey '^N' history-beginning-search-forward
cp very_long_filename.{old,new}_ext\e[1;5A и \e[1;5B. Для Alt — просто замените пятерку на тройку.
mkdir directoy && cd $_ # создание директории и переход в созданную директорию
sudo !!Ну и что в этом хорошего? Выполнять команду от рута не видя её… Более того, если нечаянно выполнить такую команду из истории то по факту от рута нечаянно выполнится любая команда. И даже если посчитать по нажатию кнопок: Up Home s u d o пробел это ровно столько же нажатий, сколько и на набор этой команды! В общем, вредная команда, зря Вы её на первое место в рейтинге поставили.sudo !! <Enter> сразу же после получения Permission denied.<space>, EnterShift+1 можно достать, не особо двигая кисти рук относительно основной позиции при слепой печати, а стрелочки и <Home> можно нажать, не двигая кисть только на небольших (ноутбучных и им подобных) клавиатурах.<C-p>, заменяющее у меня <Up>; при том из‐за того, что <C-p> (как и <Up>) привязан к history-beginning-search-backward нажимать <Home> не нужно (в таком варианте позиция курсора при навигации по истории остаётся неизменной). Оболочка, конечно же, zsh.sudo или что‐то в этом роде, то здесь другая логика: о необходимости изменений я узнаю немедленно по прекращению работы команды (т.е. либо она сразу завершается с ошибкой, либо я её убиваю по <C-c>, видя неправильный результат) и, как правило, у меня так же немедленно возникает идея, как её исправить. Немедленно. Если идея уже есть, то руки не должны меня тормозить. Со стрелками они тормозят. Разумеется, предполагается, что я не убирая руки с основной позиции. Не вижу причин убирать, если я знаю, что мог что‐то сделать неправильно.grep выдаёт, то, что мне нужно; затем проверяю следующую команду в цепочке (она уже придумана, но пишется только после проверки предыдущей). Идея всех команд в голове уже есть. Зачем себя тормозить?cd в любой подкаталог заданных:CDPATH=:..:~:~/projects
history | awk '{a[$2]++ } END{for(i in a){print a[i] " " i}}'|sort -rn |head -n 10
setopt HIST_IGNORE_ALL_DUPS

exiftool "-DateTimeOriginal-=0:0:0 3:0:0" DIRexport TEST=/tmp/some_path
rm -rf $TEST/*
function _-insert-primary()
{
emulate -L zsh
LBUFFER="${LBUFFER}$(xclip -o)"
}
function _-insert-clip()
{
emulate -L zsh
LBUFFER="${LBUFFER}$(xclip -o -sel clip)"
}
zle -N insert-primary _-insert-primary
zle -N insert-clip _-insert-clip
bindkey -M evi "\C-r*" "insert-primary"
bindkey -M evi "\C-r+" "insert-clip"
. С ними вставка будет на <C-r>* (мышиный буфер) и <C-r>+ (обычный буфер) (как в vim). Комментироваться указанным способом будет всё равно одна строка, но есть важное отличие: при вставке таким способом команды не исполняются независимо от наличия или отсутствия в них каких‐либо символов, включая символ новой строки.#, но раскомментировать их потом будет не слишком удобно (если только не написать ещё один widget для раскомментирования).Alt + BackSpace — удалить слово в строке до разделителяpython -m smtpd -n -c DebuggingServer localhost:1025 #Отладочный smtp сервер
cat <whatever> | python -mjson.tool # печатает отформатированный json
ls music | sort --random-sort #перемешивание
bash -x #будет показана отладочная информация выполняющегося скрипти
time echo {1..5} | xargs -n 1 -P 5 sleep
real 0m5.007s
user 0m0.004s
sys 0m0.004s
time echo {1..5} | xargs -n 1 sleep
real 0m15.010s
user 0m0.000s
sys 0m0.004s
[esc] - *
cd -
alias server='ruby -run -e httpd -- -p 5000 .'
!!$ — вставить последний аргумент из предыдущей комманды^foo^bar — гениально!> с очисткой файла, >> — без. Основы, можно сказать. touch a.txt вполне можно использовать > a.txttouch не изменяет содержимое существующего файла, а > уничтожит текущее содержимое.>> a.txt.calyes "I love Habr"netstat -snetstat -ap | grep sshnetstat -cecho $terminfo[kcuu1] выдаёт то, что выдают стрелочки (но у меня — не всегда: при использовании команды внутри Vim всё правильно, а внутри zsh — нет). Соответствие названий записей клавишам можно узнать в man terminfo.bindkey -k up history-search-backward bindkey -k down history-search-forward
<Enter>~. — закрывает SSH клиент и возвращает в консоль.<Enter>~?
dtach -A /tmp/session.dt bashCtrl + \ — detach$var:a:h (полное имя каталога, в котором находится файл из данной переменной), то математики (обёртка над bc — это совершенно не то: попробуйте поработать с шестнадцатиричными цифрами), то автодополнения (оно есть для гораздо меньшего числа команд, нежели в bash или zsh), то нормального разбиения на аргументы ((command) разобьёт по новым строкам, если вы не станете трогать IFS, причём в документации об IFS не написано ничего (единственное упоминание — в документации read)). Короче, моё впечатление:
Десятка лучших консольных команд