![필요한 경우에만 제거를 고려하십시오.](https://linux55.com/image/24747/%ED%95%84%EC%9A%94%ED%95%9C%20%EA%B2%BD%EC%9A%B0%EC%97%90%EB%A7%8C%20%EC%A0%9C%EA%B1%B0%EB%A5%BC%20%EA%B3%A0%EB%A0%A4%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
clear
터미널에 특정 명령을 입력할 때마다(실행하기 전) 특정 명령을 실행하도록 bash를 구성하고 싶습니다 . 어떻게 해야 하나요?
저는 데비안 리눅스를 사용하고 있습니다.
답변1
Bash에는 사전 명령 후크가 있습니다. 일종의.
preexec () {
clear
}
preexec_invoke_exec () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; # obtain the command from the history, removing the history number at the beginning
preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG
답변2
bind 'RETURN: "\e[1~clear; \e[4~\n"'
return그 이후에는 그냥 쓰는 것이 아니라 누를 때마다 \n
줄의 시작 부분으로 이동하여 텍스트를 입력한 clear;
다음 끝으로 이동하여 \n
예상대로 입력합니다.
답변3
오늘 내가 물은 질문에서 (사용자에게 크레딧을 제공합니다.@aecolley의 답변):
bind '"\C-m": "\C-l\C-j"'
\C-m
'Enter' 키를 시뮬레이션합니다 . 분명히 \C-l
시뮬레이션되는 것은 "개행 및 들여쓰기"이므로 이 명령은 Enter 키를 Ctrl+l & Ctrl+j에 바인딩합니다.Ctrl+l
\C-j
GNU bash 버전 3.2.53(1)-릴리스(x86_64-apple-darwin14)에서 작동하지만 이 스레드의 다른 답변은 작동하지 않습니다. 또한 이는 다른 명령처럼 "clear" 명령으로 기록을 오염시키지 않습니다.
답변4
필요한 경우에만 제거를 고려하십시오.
cb4() {
preexec () {
clear
}
}
이것은 라는 후크를 사용하며 preexec
zsh에서도 작동하는 것으로 확인되었습니다.
그런 다음 각 명령을 실행하기 전에 모든 세션을 자동으로 지우고 싶습니다.cb4
모든 상황에서 항상 지우기를 원한다고 확신한다면
preexec () {
clear
}
정말로 단말기를 재설정하고 싶다면
단어를 clear
다음으로 바꾸십시오.tput reset
tput
선택사항이지만 재설정 프로세스 속도를 높일 수 있습니다.