(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분마다 (최대) 실행).
그러나 나는 프롬프트에 명령이 나타나는 것을 좋아하지 않습니다.