Многострочные команды в истории возвращают только первую строку с двойной обратной косой чертой

427
Werner

Я использую oh-my-zsh со следующей конфигурацией истории:

setopt appendhistory autocd extendedglob setopt EXTENDED_HISTORY setopt histignoredups sharehistory 

В истории поиска Ctrl+ Rи клавиши со стрелками установлены по умолчанию, то есть:

% bindkey '^r' "^R" history-incremental-search-backwar 

Однако через некоторое время я сталкиваюсь с проблемой, что при поиске команд в истории я получаю первую строку команды с двойной обратной косой чертой в конце, но не другие строки. Фактически, это происходит только тогда, когда обновляется файл истории, если команда свежая и я ищу ее в той же оболочке, в которую я ее ввел, я получу ее правильно, но если я закрою оболочку и снова открою ее, и попытаться извлечь команду из истории, я получу это так:

-> входная команда:

echo \ "multi-line command" 

результат при использовании поиска по истории (bck-i-search: echo ):

эхо \

Кто-нибудь знает, что может быть причиной этого? Информация, которую я нашел здесь и в других местах, не помогла :(

Далее я добавляю выдержку из моей истории:

 4453* cd place 4454* someCommand -d folder \\ 4455* --opt 1 \\ 4456* -foo1 bar1 -foo2 bar2 -aeps 0 0.01 0.01 >&! output.log & 4457* du -sh 4460* ls * 4461* exit 

Версия zsh для двух хостов, которые не работают: 5.0.2 и 5.0.5.

Затем я добавил одну многострочную команду из-за синтаксиса:

 3723 echo $ZSH_VERSION 3724 for x in 1 2 3; do echo $x \ndone 3725* someCommand -d folder \\ 

который работает нормально. Многострочная цитата, как в:

echo "lala dquote> dump dquote> dump dquote> ok" 

в результате чего:

 3732 echo "lala\ndump\ndump\nok" 

и который тоже работает нормально.

Этого не происходит на моей локальной машине (zsh версии 5.0.7), что также приводит к многострочным командам с \ n вместо double \:

15365 echo \\n multi \\n line \\n command 

А также на другом удаленном сервере (4.3.11):

14133 example -d folder \\n -pp mpp \\n -c mcc \\n -x mxxz \\n -r mrr \\n -e 0 \\n -o out \\n -debug 

На всех машинах я использую одинаковые файлы конфигурации.

0
Похоже, у `zsh` есть проблемы с чтением / сохранением файла истории правильно. Не могли бы вы добавить выдержку из файла истории, где вы вводили многострочные команды. В лучшем случае некоторые с явными разрывами через экранированную новую строку (как в вашем примере), некоторые с разрывами строк в кавычках и некоторые с многострочными из-за синтаксиса (например, `для x в 1 2 3; сделайте echo $ x; done` с * * Введите **, нажимая после / вместо `;`). Также, какую версию `zsh` вы используете (` echo $ ZSH_VERSION`). Adaephon 7 лет назад 0
Hi ~@Adaephon, thanks for your comment. I have added the information you requested :) Werner 7 лет назад 0

1 ответ на вопрос

0
Achal Dave

Может быть, это связано с проблемой, описанной здесь ? Если это так, то предложенное исправление обновляет zsh до версии 5.0.5.

К сожалению это не мой случай, у меня zsh 5.2 :( Werner 6 лет назад 0