netcat прост, но не все версии закрывают соединение надежно.
Вот поток об использовании socat
: socat надежная передача файлов по TCP
Подвести итог его:
Файл отправки сервера:
server$ socat -u FILE:test.dat TCP-LISTEN:9876,reuseaddr client$ socat -u TCP:127.0.0.1:9876 OPEN:out.dat,creat
Файл получения сервера:
server$ socat -u TCP-LISTEN:9876,reuseaddr OPEN:out.txt,creat && cat out.txt client$ socat -u FILE:test.txt TCP:127.0.0.1:9876
OPEN:out.txt,creat,trunc
удалит все байты вout.txt
прежде, чем записать в него. Эта опция подражает тому, из чего Вы ожидали быcp
, и, вероятно, что Вы хотите.OPEN:out.txt,creat,excl
откажется писатьout.txt
если это уже существует. Используйте эту опцию для дополнительной безопасности.OPEN:out.txt,creat,append
добавит данные кout.txt
.
Можно использовать zle's history-search
функциональность:
bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
Это связывает Вверх и вниз (корректируйтесь для своих собственных escape-последовательностей) к поиску истории, назад и вперед, основанный на том, что было уже введено в подсказку.
Так, если необходимо было фиксировать "энергию" и совершить нападки, zsh пересечет назад через историю только для тех команд, начинающихся с "энергией".
Можно было дополнительно поместить курсор в конце строки, после того как Вы выбрали свою желаемую команду из истории zsh при помощи поисковой конечной функции истории (обычно расположенный в /usr/share/zsh/functions/Zle/
) и добавление -end
в конец каждой строки, как так:
autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^[[A" history-beginning-search-backward-end
bindkey "^[[B" history-beginning-search-forward-end
Другая полезная опция history | grep
Присвойте псевдоним, например.
alias hg='history | grep'
затем можно ввести hg whatever
для поиска команд, Вы использовали, например.
$ hg chmod
1309 chmod +x rotate_files.sh
1385 chmod +x rotate_files_270.sh
1512 chmod +x testy.sh
1528 chmod +x act_on_2_numbers.sh
2142 chmod +x ~/bin/display_tmux_pane_pwd.sh
4532 chmod +x cat_files.rb
Я поместил этот псевдоним в свои точечные файлы.
hg
напомните мне о... О, да, Подвижный!
–
27.03.2015, 21:57
Вы могли бы хотеть использовать сценарий в https://github.com/zsh-users/zsh-history-substring-search
Где можно ввести в любой части любой ранее вводимой команды и нажать клавиши Up and Down для циклического повторения посредством команд соответствия.
Если вы используете oh-my-zsh, добавьте history-substring-search
в строку plugins=(...)
.
Затем добавьте
bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down
где-то ниже строки, которая гласила source $ZSH/oh-my-zsh.sh
. Сохраните и запустите новый терминал или запустите source ~/.zshrc
в текущем терминале.
Примечание: ^[[A
- это последовательность нажатия стрелки вверх в терминале, который я использую (kitty) и многих других. Чтобы проверить в выбранном вами терминале, введите showkey -a
, а затем нажмите клавишу, для которой вы хотите найти управляющую последовательность.
Как насчет использования zsh-autosuggestions
?
Дело в том, что для каждой команды, которую вы вводите, этот плагин покажет вам несколько предложений, которые могут быть приняты или нет. Попробуйте его и дайте нам несколько отзывов.
Без плагинов мы можем нажать Ctrlr, чтобы выполнить обратный поиск в истории, как только вы начнете вводить команду, совпадающие команды появятся в виде предложений.
Вместо этого вы можете использовать zaw , который полностью заменяет ваш поиск гораздо более совершенным суперпоиском по нескольким ключевым словам, а также решает вашу проблему - историю поиска это только одна из вещей, которые zaw может искать.
Небольшое вступление / обсуждение здесь
Я согласен с cheflo, что поиск "подстроки" более полезен. Я не могу комментировать там, поэтому я начал новый ответ. Я использую oh-my-zsh, и добавляю "history-substring-search" в plugins=(...) в ~/.zshrc. Затем создайте исходный текст ~/.zshrc. Больше ничего добавлять не нужно. Используйте "bindkey" для проверки:
"^[OA" history-substring-search-up "^[OB" history-substring-search-down
Позже, если вы наберете "to" и стрелку вверх, появится "history" и "to" будет выделено (если вы использовали команду "history" до этого).
Поскольку я использую о -мой -zsh и решение подстроки от joelostblom, James, Я модифицирую.zshrc следующим образом :(, в строке 13 найдите строку «source $ZSH/oh -my -zsh.sh ", затем измените код вокруг него.)
plugins=(
git
history-substring-search
)
source $ZSH/oh-my-zsh.sh
bindkey -v
bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down
Это сработало для меня (на macOS ), чтобы легко получить доступ к истории подстрок с помощью стрелок вверх/вниз. Привязка ключей зависит от вас.
История поиска подстрок лучше, чем просто доступ к командам, начинающимся со строки. В большинстве случаев это больше похоже на ctrl -r, без совпадения глобусов или регулярных выражений.
Начиная с инструкций в zsh -пользователи/zsh -история -подстрока -поиск
brew install zsh-history-substring-search
# add the following to.zshrc
source /usr/local/share/zsh-history-substring-search/zsh-history-substring-search.zsh
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
Теперь наслаждаюсь этим полностью.
Я использую плагин vi -mode . И затем в моем ~/.zshrc у меня есть следующие привязки:
bindkey "^P" history-beginning-search-backward
bindkey "^N" history-beginning-search-forward
Это позволяет мне использовать ^P
и ^N
как обычный поиск вперед и назад, если я не ввожу текст, и как фильтрованный поиск, если я это делаю.
Ни один из существующих ответов не начинает добавочный поиск с того, что уже было введено, как в заданном вопросе. Это действительно возможно:
_history-incremental-search-backward () {
zle.history-incremental-search-backward $BUFFER
}
zle -N history-incremental-search-backward _history-incremental-search-backward
# this line is actually not necessary since this is default.
bindkey '^R' history-incremental-search-backward
history-incremental-search-backward
и передаем переменную $BUFFER
, которая содержит содержимое введенной на данный момент подсказки zsh. Затем вы можете продолжить ввод в минибуфер, чтобы еще больше сузить область поиска. Для тех, кто хочет узнать больше о ответ jasonwryan'а
Это упомянутый файл:
# function history-search-end {
#
# This implements functions like history-beginning-search-{back,for}ward,
# but takes the cursor to the end of the line after moving in the
# history, like history-search-{back,for}ward. To use them:
# zle -N history-beginning-search-backward-end history-search-end
# zle -N history-beginning-search-forward-end history-search-end
# bindkey '...' history-beginning-search-backward-end
# bindkey '...' history-beginning-search-forward-end
integer cursor=$CURSOR mark=$MARK
if [[ $LASTWIDGET = history-beginning-search-*-end ]]; then
# Last widget called set $MARK.
CURSOR=$MARK
else
MARK=$CURSOR
fi
if zle.${WIDGET%-end}; then
# success, go to end of line
zle.end-of-line
else
# failure, restore position
CURSOR=$cursor
MARK=$mark
return 1
fi
# }
zle -N widget [ function ]
:Создайте пользовательский -виджет.
Когда новый виджет вызывается из редактора, вызывается указанная функция оболочки .
Если имя функции не указано, по умолчанию используется то же имя, что и у виджета .
Рекомендуется, чтобы виджеты, определяемые пользователем -, не имели имен, начинающихся с .
.
# To make history-beginning-search-{back,or}ward-end an alias for history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
# why `history-beginning-search-{back,or}ward-end` is chosen?
# There is widgets named `history-beginning-search-{back,or}ward`,
# so just add 'end' to them, showing their relevance.
Думаю, (не совсем уверен ), без этой строки if [[ $LASTWIDGET = history-beginning-search-*-end ]]
в файле над файлом код
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^[[A" history-beginning-search-backward-end
bindkey "^[[B" history-beginning-search-forward-end
можно заменить на:
bindkey "^[[A" history-search-end
bindkey "^[[B" history-search-end
# less word to type
(Просто чтобы показать использование zle
и bindkey
. Теперь, когда у нас есть строка if
, не используйте упрощенную.)
bindkey
bindkey -v
:выберите раскладку viins и привяжите ее к основнойbindkey -e
:выберите раскладку клавиатуры emacs и привяжите ее к основной
-A
:создать псевдоним (или ссылку)bindkey -A viins main
делает viins
псевдонимом дляmain
С именем main
связано либо emacs
, либо viins
.
Если одна из переменных среды VISUAL
или EDITOR
содержит строку vi
при запуске оболочки,
тогда будет viins
,
в противном случае будет emacs
.
Создайте новую раскладку изemacs
:
bindkey -N mymapname emacs
Для использования "mymap":
bindkey -A mymapname main