나는 이것을 데비안 시스템의 pdksh
대화형 셸로 사용해 왔습니다. 처음에 명령줄 기록은 제가 AIX 및 Solaris와 같은 플랫폼에서 성장한 방식과 유사하게 작동했습니다.
pdksh
최근 Debian의 현재 구현 으로 인해 mksh
명령줄 기록이 더 이상 내 손가락이 기대하는 대로 작동하지 않습니다. 내가 mksh
원하는 것을 수행하도록 이것을 구성할 수 있는지, 아니면 다른 관용구(또는 다른 셸)를 찾아야 하는지 알아내려고 노력 중입니다 .
ksh
저는 vi 편집 모드에서 ( set -o vi
and )를 사용합니다 FCEDIT=vi
. 여러 번 명령 프롬프트에 짧은 여러 줄 명령을 작성합니다.
daystrom:/home/pronovic> for i in 1 2 3
> do
> print $i
> done
1
2
3
이는 에서 예상대로 작동합니다 mksh
. 그러나 명령줄 기록은 그렇지 않습니다.
(이전) 내가 익숙한 모든 kshell 구현에서 스크립트는 기록에 단일 항목으로 남아 있습니다. 그래야 공을 치고 ESC-k
라인 앞으로 돌아갈 수 있다 for
. 그런 다음 스크립트를 다시 편집하거나 ESC-v
을 클릭할 수 있습니다 vi
.
에서는 mksh
내 스크립트의 모든 줄(line for
, do
line, print
line 등)이 내 기록에서 별도의 항목으로 끝납니다. 그러니 ESC-k
저를 대기열로 데려가시고 done
다시 대기열 ESC-k
로 데려가세요 .print
이를 구성하는 방법을 찾고 있으므로 mksh
스크립트 ESC-k
의 시작 부분으로 이동하여 스크립트를 실행하거나 다시 편집할 수 있습니다. 그러나 나는 이것을 할 방법을 찾지 못했습니다.
내가 찾은 유일한 토론은게마네, 이는 ^O
어떤 방식으로든 사용될 수 있음을 의미합니다. 그러나 이것이 어떻게 관련되는지는 나에게 명확하지 않습니다. 또는 vi 편집 모드에서는 관련이 없을 수도 있습니다.
이 작업을 수행하는 것이 가능합니까?
답변1
mksh
관리자는 여기에 있습니다 ;-) 이것은 일반적인 "지원 포럼"은 아니지만...
mksh에서 대화형 편집(ESC+v(vi) / ^Xe(emacs) 아님)은 내부적으로 개행 문자로 끝나기 때문에 기록과 마찬가지로 단일 줄로 제한됩니다. 이는 pdksh에서도 항상 그렇습니다.
분명히 Debian의 pdksh는 어떤 방식으로든 패치되었으며 ^J
줄 바꿈이 포함되어 있는 것을 볼 수 있습니다. 이것은 내가 모르는 데비안 특정 수정 사항입니다. (저는 vi 편집 모드를 사용하지 않기 때문에 사용자에게 가끔 자료를 요청하고 패치를 보내도록 합니다. 지금까지 이를 유지 관리하는 사람이 아무도 없어서 지금은 약간 고립되어 있지만 충분히 인기가 있습니다. edit.c
두 모드의 코드를 통합하고 유지 관리 문제를 없애기 위해 전체 코드를 다시 작성하는 것을 고려 중입니다 .
^O
emacs 모드에만 해당됩니다. 하지만 아마도 vi 모드에서 작동하게 할 수도 있을 것입니다...
귀하의 직접적인 질문에 대답하려면: 아니요, 현재 mksh에서는 불가능합니다. 하지만 나는 데비안이 한 일을 보고 우리가 그것으로 살아갈 수 있는지 알아내려고 노력할 수 있습니다.
2015-07-05 편집
나는 pdksh를 살펴보았습니다. 이것은 실제로 "단순한" 기록의 기능입니다. 단순히 "복잡한" 기록을 복제하는 것은 불가능하며, 다른 많은 운영 체제와는 달리 pdksh의 데비안 이전 래퍼는 방금 해당 기능을 활성화하지 않기로 결정했습니다.
오늘 이 기능을 완전히 다시 구현하여 명령이 완전히 컴파일될 때까지 실제 기록 쓰기를 연기했습니다. 즉, 드문 오류 사례에서 일부 기록 항목이 손실될 수 있음을 의미합니다(확인해 보니 구문 오류는 범주에 속하지 않습니다). 입력은 이제 ESC v
/ ^Xe
및 기록 저장/로딩을 포함하여 Emacs 및 Vi 모드에서 원하는 대로 작동합니다 .