의사도요 질문
셸에서 문자열을 대화식으로 편집하고 편집된 값을 변수에 저장하는 좋은 방법이 있습니까?
기본적으로 동일 a=$(cat "hello world" > /tmp/command && vim /tmp/command </dev/tty >/dev/tty && cat /tmp/command)
하지만 편집하는 동안 화면을 지우지 않습니다(따라서 위치를 잃지 않고 이전 명령의 출력을 계속 읽을 수 있습니다).
나는 정말로 똑같은 행동을 원한다IMV또는ICP, 하지만 파일을 이동하거나 복사하는 것이 아니라 문자열을 다시 가져오고 싶습니다.
또는 유사 a=$(echo "hello world" | zenity --entry-text "$(cat)" --entry)
하지만 X가 없습니다.
이것은 "나는 조랑말을 원해요" 유형의 질문이지만 일반적인 상황에서는 유용하다고 생각됩니다.
문맥
Stack Exchange는 컨텍스트를 좋아하므로 구체적인 사용 사례는 다음과 같습니다.
좋아요다루기 힘든라인 편집. 나는 그것을 사용한다zsh 위젯다음과 같이 기록의 일부 명령을 현재 줄에 추가합니다.
strace <M-l h>
->
<LIST of history commands>
->
SELECT COMMAND
->
POP UP EDITOR
->
TWEAK COMMAND
->
strace command with lots of arguments some of which I want to edit
고려된 대안
!!
내가 원하는 것을 달성하려면 쉘의 명령줄 편집기와 기록( )을 사용하십시오 .
사용선 echo hello | zenity --entry-text -entry
<- 저는 X를 사용하는 것을 별로 좋아하지 않습니다.
답변1
vared
zsh 내장과 같은 것을 설명하고 있습니다 . 변수의 현재 값을 ZLE에 넣고, 편집을 마치면 편집된 행이 변수의 새로운 값이 됩니다.
% x=foo
% vared x
foo
foo
[ 변경할 부분을 편집 bar
하고 Return 키를 누르세요]
% echo $x
bar