-f
не меняет поведение tar
по отношению к потокам, файлам или чему-то подобному; он указывает имя используемого архива .
Я не знаю ни одного варианта tar
, который может обрабатывать отсутствие аргумента для опции -f
, и я не знаю ни одного надежного способа сделать это. Как говорит cas , вам нужно помнить, что -f
всегда принимает аргумент. Один из способов сделать его менее подверженным ошибкам -— всегда выделять его; легче пропустить параметр f
в такой последовательности, как -xzvf
, чем с отдельным -f
.
Еще лучше всегда использовать -f
с -
, если необходимо; это позволяет избежать зависимости от поведения tar
без опции -f
(, которая зависит от параметров времени компиляции -и переменной TAPE
).Один из способов решить эту проблему — всегда начинать с -f -
после действий и при необходимости изменять -
.
Следующий код заставляет Right работать нормально, если только он не находится в конце командной строки. Если он находится в конце командной строки, он ищет предыдущую совпадающую строку истории, начинающуюся с текста в текущей строке (, это должен быть точно такой же текст, включая пробелы ). Если он находит его, он вставляет следующую часть совпадающей строки до начала следующего слова. С числовым аргументом N он извлекается из N-й соответствующей строки.
function immediate-complete-word-from-full-history {
emulate -L zsh
setopt extended_glob
local line=${${history[(R)${(b)LBUFFER}*]}[${NUMERIC:-1}]}
local blank=$' \t\n\f'
if [[ -z $line ]]; then return; fi
line=${line#$LBUFFER}
LBUFFER+=${line%"${line##[^$blank]##[$blank]#}"}
}
function forward-char-or-immediate-complete-word-from-full-history {
if [[ -n $RBUFFER ]]; then
zle forward-char
else
immediate-complete-word-from-full-history
fi
}
zle -N forward-char-or-immediate-complete-word-from-full-history
bindkey '\e[C' forward-char-or-immediate-complete-word-from-full-history
bindkey '\eOC' forward-char-or-immediate-complete-word-from-full-history
Известная ошибка :это не работает со строками истории, которые содержат разрыв строки, потому что fc
выводит разрыв строки как \n
, что неотличимо от фактического наличия \n
внутри строки. Полностью правильное решение должно было бы вытягивать строки из $history
.