모든 tty 쉘에서 별칭을 설정하는 방법은 무엇입니까?

모든 tty 쉘에서 별칭을 설정하는 방법은 무엇입니까?

쉘 tt2에 별칭을 설정했지만 다른 tty 쉘에서는 작동하지 않습니다. 시스템 전체 별칭을 만드는 방법을 아십니까?

답변1

노력할 필요가 없습니다. 파일을 변경하기만 하면 됩니다 /etc/bashrc. 알아요, 현재 tty에서만 작동한다고 생각할 수도 있지만 친구 없이도 작동합니다. 한 번 로그아웃하고 원하는 사용자로 다시 로그인하세요. SSHing이나 다른 방법으로 테스트할 수도 있습니다.

하지만 만약 작동하지 않는다면 – 물론 작동할 것이라 확신하지만 – 이 문서를 읽어보세요. 많은 도움이 될 것입니다:/etc/profile

답변2

셸 프로세스가 외부에서 새 별칭을 사용하도록 강제할 수는 없으므로 새 별칭을 로드하라는 요청은 모든 터미널의 모든 셸 인스턴스에서 이루어져야 합니다.

bash에 넣어서 각 명령 후에 코드를 실행할 수 있습니다.PROMPT_COMMAND바꾸다. 그래서 당신은 다음과 같은 것을 사용할 수 있습니다

reload_aliases () {
  . ~/.bash_aliases
}
PROMPT_COMMAND="$PROMPT_COMMAND
reload_aliases"

~/.bash_aliases그리고 셸에 별칭을 입력하는 대신 편집하여 별칭을 정의하세요 . 이 PROMPT_COMMAND변수는 명령을 실행한 후에만 실행되므로 명령을 실행해야 합니다(예 :: 아무것도 수행하지 않는 명령). 빈 명령줄로는 충분하지 않습니다.

alias파일 에 자동으로 추가하도록 명령을 무시할 수도 있지만 .bash_aliases, 하나의 셸에 대해 작업별 별칭만 정의하려는 경우에는 매우 혼란스럽기 때문에 권장하지 않습니다. 이 명령을 사용하여 현재 쉘에 특정 별칭과 해당 정의 alias ALIASNAME >>~/.bash_aliases( ALIASNAME별칭의 실제 이름으로 대체됨) 를 추가할 수 있습니다.

zsh에서는 사용할 수 있습니다precmdbash와 달리 PROMPT_COMMANDbash 는 각 프롬프트가 표시되기 전에 실제로 실행되므로 프롬프트를 누르는 것만으로도 충분합니다. zsh도 사용자 개입 없이 별칭 파일을 다시 로드할 수 없습니다.PROMPT_COMMANDprecmdEnter

또는 다음을 설정하여 쉘이 신호에 반응하도록 할 수 있습니다.trap. 쉘은 SIGUSR1 신호를 사용하지 않으므로 이를 사용하여 별칭을 로드할 수 있습니다.

trap 'reload_aliases' USR1

( reload_aliases기능은 위와 같습니다.) 이런 식으로 SIGUSR1 신호가 모든 장치에 전송되어야 합니다.인터렉티브별칭 목록을 편집할 때의 셸 인스턴스입니다. 이 신호의 기본 동작은 쉘을 종료하는 것이므로 신호를 스크립트로 보내지 마십시오! 대화형 셸을 나열하는 쉬운 방법은 없습니다. 다음 Linux 관련 스크립트가 가까이 있지만 경쟁 조건으로 인해 관련 없는 프로세스가 예기치 않게 종료될 수 있다는 점에 유의하세요.

for pid in $(pgrep bash); do
  if cd "/proc/$pid" 2>/dev/null &&
     [ -c fd/0 ] &&
     grep '^SigCgt: .............[2367abef]..$' status; then
    kill -USR1 "$pid"
  fi
done

관련 정보