빈 문자열에 별칭을 붙일 수 있나요?

빈 문자열에 별칭을 붙일 수 있나요?

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 debugcommand1사용자가 명령을 입력할 때마다 함수가 실행 됩니다 .
    • 가장 최근에 실행된 명령이 가 아닌 경우 command2command1설정됩니다 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'입니다 . 사람들은 원하고 기대합니다).gigit

빈 문자열에 대한 별칭을 지정하는 것은 불가능합니다. 왜냐하면 그것이 시작 부분에 있기 때문입니다.모든명령줄 항목.

매번 명령을 실행하려면 PS0(충분한 최신 버전의 bash를 가정하여) 모든 명령 전에 무언가를 실행하거나 PROMPT_COMMAND모든 명령 후에 무언가를 실행할 수 있습니다. 예를 들어:

PROMPT_COMMAND='echo $?'

실행하는 모든 명령 후에 실행한 명령의 반환 값을 에코합니다.

Bash는 명령줄에 빈 줄을 입력한 경우에만 작업을 완료하는 좋은 방법이 없습니다. Bash는 이런 식으로 공백을 구분하지 않습니다.

관련 정보