Acabei de executar o comando abaixo no terminal:
$ while read i
> do
> echo $i
> done
4
4
Mas quando tentei executar novamente o comando usando o recurso de histórico de seta para cima, recebi apenas o comando parcial como abaixo:
$ while read i
Como imprimir todo o loop while usando a seta para cima no KSH?
A edição de linha no ksh original é bastante limitada. Você pode querer usar um de seus "clones" como zsh¹ ou bash.
Para ksh93, acho que se você usar o
vi
modo de edição (ksh -o vi
) em vez deemacs
ougmacs
um, a recuperação de comandos de várias linhas funcionará , embora os caracteres de nova linha sejam renderizados como^J
. Isso também é o que você obtémpdksh
e seus derivados em todos os modos de edição.Observe que você também pode inserir esses caracteres de nova linha Ctrl+VCtrl+Jpara que o código de várias linhas seja inserido em uma linha e, em seguida, seja capaz de recuperá-lo mais tarde, mesmo no
emacs
modo.Outra opção é usar
fc
para editar a linha anterior em um editor de texto real:Chamaria seu editor preferido (em
$FCEDIT
, o padrão éex
no meu sistema) na última linha de comando (possivelmente multilinha) que continhawhile
. E, em seguida, execute-o depois de salvar e sair no editor.¹
zsh
também possui umksh
modo de emulação que faz com que ele se comporte mais de pertoksh
, caso haja algunsksh
comportamentos dos quais você depende (inserido comemulate ksh
ou ao invocarzsh
comoksh
)