줄 끝에서 커서가 깜박이도록 프롬프트에 ((실행 가능) 문자열)을 어떻게 에코합니까?

줄 끝에서 커서가 깜박이도록 프롬프트에 ((실행 가능) 문자열)을 어떻게 에코합니까?

(a (executable-)string)커서가 줄 끝에 오도록 프롬프트를 어떻게 에코할 수 있나요 ?

이런 식으로 Enter실행을 누르거나 Ctrl줄을 버릴 수 있습니다 C.

이것이 가능한가?

나는 (대화형) bash 스크립트가 더 나을 것이라는 것을 알고 있지만 단순하게 유지하고 싶었습니다.

예:

echo_to_prompt "rm -R ./tmp/logs/delete_me_every_once_in_a_while/"

결과는 다음과 같습니다.

user@machine:~$ rm -R ./tmp/logs/delete_me_every_once_in_a_while/[CURSOR]

답변1

쉘 스크립트나 일반 명령줄에서 echo_to_prompt() 명령을 사용해야 하는 경우 간단히 다음을 사용할 수 있습니다 read.

#!/bin/sh

echo_to_prompt() {
        echo -n "$USER@$HOSTNAME:$PWD $" $@
        read && $@
}

echo_to_prompt rm -R ./tmp/logs/delete_me_every_once_in_a_while/

명령줄에서 사용하려면 .bashrc/.profile/... 에 echo_to_prompt() 함수를 추가하면 됩니다.

답변2

몇 개 있어요제어 순서이를 터미널로 보내면 일부 입력이 시뮬레이션됩니다. 그러나 입력을 직접 시뮬레이션할 수는 없습니다. 이는 특히 유용하지 않으며 제어 문자가 포함된 파일을 표시할 때 임의의 입력을 생성하는 것은 위험할 수 있습니다.

이러한 제어 시퀀스(장치 상태 보고서, 마우스 위치 보고서 등)의 대부분은 입력해도 무해한 제어 시퀀스를 다시 보냅니다. 일부 레거시 터미널(이전 버전의 xterm 포함)에는 창 제목을 다시 보내는 제어 시퀀스가 ​​있으며, 이는 다른 제어 시퀀스를 통해 설정할 수 있지만 최신 터미널은 이 명령을 무시합니다.

간단히 말해서, 하고 싶은 일을 정확히 피하는 것은 불가능합니다.

답변3

zsh를 사용하세요.

zle-line-init() {
  ((SECONDS - last < 300)) && return
  LBUFFER="rm -R ./... "
  last=$SECONDS
  zle -R
}
zle -N zle-line-init

(5분마다 (최대) 실행).

그러나 나는 프롬프트에 명령이 나타나는 것을 좋아하지 않습니다.

관련 정보