zsh испортить новую строку и / или ввод эхо - PullRequest
0 голосов
/ 30 января 2020

(РЕДАКТИРОВАТЬ) : описание, приведенное ниже, представляет собой два несвязанных поведения: одно ведет себя так, как ожидалось, другое - фактическая проблема, связанная с zsh. В zsh.


регрессии новой строки нет. Я перешел на zsh с bash в OSX (Каталина). Я также использую oh-my-zsh. Я недавно заметил символ новой строки или эхо ввода иногда отсутствует. Я нашел как минимум два случая:

  1. с использованием time: (при первом вызове используется /bin/zsh)
~
▶ time ls
 1pwd.bkp       Downloads   Pictures   'VirtualBox VMs'   go                pf-docs.txt       tools
 Applications   Library     Public      bin               istio-lean.yaml   plugins.sbt.bkp   wip
 Desktop        Movies      SWIFT       docs.txt          main.txt          project           workshop
 Documents      Music       Snapshots   git               normal.yml        todo
gls --color=tty  0.00s user 0.00s system 62% cpu 0.009 total

~
▶ /bin/sh
# time ls
1pwd.bkp        Downloads       Pictures        VirtualBox VMs  go              pf-docs.txt     tools
Applications    Library         Public          bin             istio-lean.yaml plugins.sbt.bkp wip
Desktop         Movies          SWIFT           docs.txt        main.txt        project         workshop
Documents       Music           Snapshots       git             normal.yml      todo

real    0m0.011s
user    0m0.003s
sys     0m0.005s
#
с использованием sbt / g8: (при первом вызове используется /bin/zsh)

~/wip/deleteme
▶ sbt new scala/scala-seed.g8
[info] Loading settings for project global-plugins from build.sbt ...
[info] Loading global plugins from /Users/ignasi/.sbt/1.0/plugins
[info] Set current project to deleteme (in build file:/Users/ignasi/wip/deleteme/)
[info] Set current project to deleteme (in build file:/Users/ignasi/wip/deleteme/)

A minimal Scala project.

name [Scala Seed Project]:
Template applied in /Users/ignasi/wip/deleteme/./myprojectzsh


~/wip/deleteme
▶ /bin/sh
sh: _direnv_hook: command not found
%n@%m %1~ %# sbt new scala/scala-seed.g8
[info] Loading settings for project global-plugins from build.sbt ...
[info] Loading global plugins from /Users/ignasi/.sbt/1.0/plugins
[info] Set current project to deleteme (in build file:/Users/ignasi/wip/deleteme/)
[info] Set current project to deleteme (in build file:/Users/ignasi/wip/deleteme/)

A minimal Scala project.

name [Scala Seed Project]: MyProjectBinSh

Template applied in /Users/ignasi/wip/deleteme/./myprojectbinsh

# ls

Обратите внимание, что вызов в /bin/zsh не отражает ввод пользователя (myprojectzsh) после name [...]::

name [Scala Seed Project]:
Template applied in /Users/ignasi/wip/deleteme/./myprojectzsh

и даже отсутствует пустой символ новой строки.

Я не исключаю, что на самом деле это две разные проблемы в time и sbt / g8, которые имеют те же симптомы.

PS: Все становится немного странно, когда я пытаюсь time echo hello в /bin/zsh:

▶ time echo hello
hello

~
▶

Где time отчет даже не распечатывается (?).

1 Ответ

2 голосов
/ 30 января 2020

Нет ничего запутанного в 1. time встроенная команда оболочки в zsh (а также в bash). Вы можете проверить для себя

which time

Поведение и стиль вывода zsh время отличается от того, что указано в bash. Вы можете запустить «настоящую» двоичную реализацию time: /usr/bin/time command и увидеть, что она выдаст еще один вывод в другом формате.

Также причина, по которой time echo hello не имеет вывода, заключается в том, что в zsh time не влияет на встроенные команды, такие как echo. Если вы действительно хотите, вы можете форсировать выполнение subshell, используя такие скобки, как это time (echo hello), но в конечном итоге это не имеет никакого смысла - вы измеряете время жизни subshell, а не само эхо.

...