Bash에서 null 명령의 별칭을 지정할 수 있나요? 즉, 사용자가 Enter쉘 프롬프트에서 키만 눌렀다는 것을 인식합니까? 예를 들어, 빈 쉘 항목으로 화면을 지우려면 명령 Enter에 별칭을 어떻게 지정합니까 clear
?
답변1
빈 명령을 무언가에 (효과적으로) 별칭으로 지정하는 방법은 다음과 같습니다.
다음을 다음 항목에 입력하세요 .bashrc
.
command1()
{
if [ "$BASH_COMMAND" != command2 ]
then
command_flag=1
fi
return 0
}
trap command1 debug
command2()
{
if [ ! "$command_flag" ]
then
echo "clear" # Put whatever command(s) you want here.
fi
command_flag=
}
PROMPT_COMMAND=command2
필요한 경우 무작위로 입력할 가능성이 적은 단어로 바꾸고 일관되게 사용 command1
하세요 .command2
trap command1 debug
command1
사용자가 명령을 입력할 때마다 함수가 실행 됩니다 .- 가장 최근에 실행된 명령이 가 아닌 경우
command2
가command1
설정됩니다command_flag
.
- 가장 최근에 실행된 명령이 가 아닌 경우
command2
에 할당하면 쉘이 프롬프트를 발행하려고 할 때마다 실행됩니다PROMPT_COMMAND
.command2
command_flag
값이 비어 있지 않으면 방금command1
실행되었음을 의미합니다. 이는 사용자가 방금 명령을 실행했음을 의미합니다. 이 경우에는 아무것도 하지 마십시오.- 그렇다면
command_flag
~ 아니다값이 비어 있지 않으면 사용자가 방금 를 쳤음을 의미합니다 Enter. 이 경우 원하는 작업을 수행하십시오(예: 화면 지우기). - 두 경우 모두
command_flag
공백으로 설정하면 다음 주기에서 모든 것이 작동합니다.
참고: 나는 이것이 bash에만 국한된 것이라고 확신합니다(즉, POSIX에서는 지원되지 않습니다).
이 답변은 기본적으로 내 답변에서 복사되었습니다.Bash에서 명령 뒤에 수직 공간 추가. 또한보십시오PROMPT_COMMAND에서 마지막 명령이 비어 있는지 확인 다른 접근 방식의 경우.
답변2
TL;DR: Ctrl-l
문자를 인쇄하거나 Enter 키를 누르지 않고 화면을 지웁니다. 이는 아마도 원하는 기능에 가장 가까운 것일 것입니다. 모든 명령 전후에 명령을 실행하거나 단일 문자에 대한 별칭을 만들 수 있습니다. 빈 문자열에는 별칭을 붙일 수 없습니다.
별칭은 반드시 한 줄에 입력된 전체 항목으로 설계되지는 않습니다.
alias ll='ls -l'
이것의 좋은 예입니다. 실행 ll /path/to/other/dir
하고 결과를 얻을 수 있습니다.
별칭이 하는 일은 문자 그대로 명령줄에 입력된 첫 번째 단어를 사용자가 지정한 값으로 변경하는 것입니다.
별칭이 작동하기 위한 유일한 요구 사항은 인쇄할 수 없는 문자(공백/탭/줄 바꿈) 뒤에 와야 한다는 것입니다. 우리의 경우 ll
그 자체는 유효하지만 ll-/mypath/
그렇지 않습니다. 왜냐하면 다른 명령의 시작이 될 수 있는 몇 문자에 별칭을 지정하는 것이 가능하고 자주 수행되기 때문 alias gi='git init'
입니다 . 사람들은 원하고 기대합니다).gi
git
빈 문자열에 대한 별칭을 지정하는 것은 불가능합니다. 왜냐하면 그것이 시작 부분에 있기 때문입니다.모든명령줄 항목.
매번 명령을 실행하려면 PS0
(충분한 최신 버전의 bash를 가정하여) 모든 명령 전에 무언가를 실행하거나 PROMPT_COMMAND
모든 명령 후에 무언가를 실행할 수 있습니다. 예를 들어:
PROMPT_COMMAND='echo $?'
실행하는 모든 명령 후에 실행한 명령의 반환 값을 에코합니다.
Bash는 명령줄에 빈 줄을 입력한 경우에만 작업을 완료하는 좋은 방법이 없습니다. Bash는 이런 식으로 공백을 구분하지 않습니다.