![실행중인 터미널을 에코하는 포인트는 무엇입니까?](https://linux55.com/image/137329/%EC%8B%A4%ED%96%89%EC%A4%91%EC%9D%B8%20%ED%84%B0%EB%AF%B8%EB%84%90%EC%9D%84%20%EC%97%90%EC%BD%94%ED%95%98%EB%8A%94%20%ED%8F%AC%EC%9D%B8%ED%8A%B8%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 느린 접근 방식을 사용했습니다.
$ ps | grep bash | grep -oP '/[0-9]+' | grep -oP '[0-9]+'
동일한 작업을 수행하는 더 좋은 방법은 무엇입니까?
답변1
음, 간단하게 다음을 발행할 수 있습니다:
tty
예:
$ tty
/dev/pts/0
만약 너라면오직터미널 번호를 얻으려면 다음을 수행하십시오.
$ tty | grep -Po '\d+$'
0
에서 man tty
:
이름 tty - 연결된 터미널의 파일 이름을 인쇄합니다. 표준 입력
답변2
이 솔루션의 장점은 빈 문자열을 출력하고 TTY가 다음 형식이 아닌 경우 실패를 반환한다는 것입니다 /dev/pts/###
.
tty | grep -Po '(?<=^/dev/pts/)\d+$'
답변3
ps -o tty= -p "$$"
당신을 위한제어 터미널(지정되지 않은 형식이지만 내가 아는 구현에서는 접두사가 없는 장치 경로입니다 /dev/
.) pid가 있는 프로세스는 $$
셸을 실행하는 프로세스입니다. ps
그 자체는 해당 프로세스의 하위 프로세스이거나 해당 프로세스의 하위 프로세스가 되며 동일한 세션에 있으므로 동일한 제어 tty를 갖습니다.
이는 tty가 를 가리키는 것과 동일합니다 /dev/tty
.
세션이 tty를 제어하지 않는 경우(일반적으로 쉘이 터미널에서 시작되지 않았지만 일부 데몬에 의해 시작되어 cron
섀도우에서 실행되는 경우) ?
쉘을 실행하는 프로세스가 종료되면 아무것도 얻지 못합니다. 산출.
이 tty
명령은 stdin(있는 경우)에서 열린 tty 장치의 경로와 다음과 같은 내용을 인쇄합니다.tty 아님그렇지 않으면 오류가 발생합니다.
그래서:
controlling_tty=$(ps -o tty= -p "$$")
case $controlling_tty in
('?') echo>&2 'No controlling tty'; exit 1;;
('') echo>&2 'Cannot determine the controlling tty'; exit 1;;
(*) controlling_tty=/dev/$controlling_tty;;
esac
printf '%s\n' "The controlling tty is $controlling_tty"
또는
if ! tty_on_stdin=$(tty); then
echo>&2 'No tty on stdin or cannot determine which it is'
exit 1
fi
printf '%s\n' "The tty on stdin is $tty_on_stdin"
대부분의 실제 상황에서 $controlling_terminal
및 $tty_on_stdin
는 동일하지만 반드시 그런 것은 아닙니다.
사용 사례에 따라 둘 중 하나를 선호할 수도 있습니다. 예를 들어, 이를 사용하여 tty
입력이 어느 터미널에서 왔는지 알아낼 수 있습니다. 어떤 터미널 프레스가 SIGINT를 보내는지 ps
확인하고 , 출력이 어느 터미널로 가는지 확인하여 오류를 찾으세요.^C
tty<&1
tty<&2
당신이 사용할 수있는:
tty=$(tty) || { tty=$(tty<&3); } 3<&1 || tty=$(tty<&2)
stdin, stdout 또는 stderr에서 tty를 찾고 $tty
.
이것은 zsh의 특수 변수에 포함된 것입니다 . 단, 세 개의 파일 설명자 중 어느 것도 tty에 도달하지 않은 경우 제어 터미널이 있으면 제어 터미널을 $TTY
얻고 , 그렇지 않으면 빈 문자열(대신 )을 얻습니다./dev/tty
not a tty
아무튼 이건 그럴 수도 있고 아닐 수도 있어요가짜터미널 장비. 의사 단말 장치의 경로 모양은 시스템 및 버전에 따라 다르며 등이 될 수 /dev/pts/somenumber
있습니다 /dev/ptyx
.