답변:
완벽하지 않은 방법 중 하나는 ps --no-headers -o comm $PPID
쉘 프롬프트에 결과를 추가하는 것입니다 . 이것은 쉘을 생성 한 프로세스의 이름을 알려줄 것입니다. 중첩 된 zsh 안에 있으면 "zsh"라고 표시됩니다. 최상위 zsh에 있다면 "xterm"또는 "screen"또는 쉘이 실행중인 모든 것을 읽습니다.
ssh 또는 su 세션에 있는지 여부를 알려면 프롬프트의 호스트 이름과 사용자 이름 부분을 보면됩니다.
중첩 된 화면을 실행하는 경우 (일반적인 상황은 아닙니다) 중첩 된 화면의 최상위 쉘에 있는지 또는 최상위 쉘에 있는지 알 수있는 방법이 없습니다. 최상위 화면 중첩 된 화면에있는 경우 항상 상태 표시 줄을 표시하도록 화면을 구성하여 여러 상태 표시 줄을 표시 할 수 있습니다.
ps: illegal option -- -
어떤 이유를 주었다 . 나는 리눅스에서 곧 다시 테스트 할 것이다 :)
--option-name
대부분 GNU 전용 기능이므로 Linux 외부의 표준 시스템 유틸리티에서는 사용할 수 없습니다. 그러나 열 이름 뒤에 ps --no-headers
추가하면 이식 효과를 얻을 수 있습니다 =
. 또한 comm
열은 POSIX가 아니지만 cmd
열 (명령의 인수를 포함)입니다. 또한 -p
POSIX 구문의 PID 전에 필요하다. 따라서 ps -o cmd= -p $PPID
휴대가 가능하며 유사한 정보를 제공합니다.
comm
열은 POSIX에 의해 지정되고 Mac OS X에 문서화되어 cmd
있지만 열은 Linux에는 있지만 표준은 아닙니다.
당신은 실제로 올바른 용어 ¹에 도달했습니다. 환경 변수가 있습니다SHLVL
모든 주요 대화식 쉘 (bash, tcsh, zsh)이 시작될 때 1 씩 증가 가 있습니다. 따라서 쉘 내부에서 쉘을 시작하면 SHLVL
1 씩 증가합니다.
그러나 SHLVL
터미널 에뮬레이터와 같은 것을 전달 하기 때문에 귀하의 우려에 직접 대답하지는 않습니다 . 예를 들어, 일반적인 구성 $SHLVL
에서 xterm의 레벨은 2입니다. 레벨 1은 X 세션을 실행하는 쉘에 해당하기 때문입니다 (~/.xinitrc
또는 ~/.xsession
) 입니다.
내가하는 일은 $SHLVL
내 프롬프트 에 표시 하는 것이지만, 쉘의 부모 프로세스가 다른 쉘인 경우에만 (“이름이 끝나고 sh
선택적인 구두점과 숫자로 끝나는 경우 에는 쉘”) 휴리스틱을 사용합니다. 그렇게하면 다른 쉘에서 실행되는 쉘의 드문 경우에 시각적으로 분명하게 표시됩니다.
터미널 에뮬레이터에서 직접 실행되는 쉘을 감지하는 것이 좋습니다. 그래서, 이러한 부모가 공정 다른 제어 단자가 껍질 위치 : 매우 정확하게 수행 할 수 있습니다 ps -o tty= -p$$
및 ps -o tty= -p$PPID
다른 출력을 생성합니다. SHLVL
이러한 셸에서 수동으로 1로 재설정 하거나 이러한 셸에서 직접 1로 설정 TERMSHLVL
하고 그렇지 않으면 증분 할 수 있습니다.
¹
매뉴얼 페이지를보고 있다고 생각하지는 않지만,이를 지원하는 세 가지 쉘 중 어느 것도 문서에 "level"이라는 단어가 포함되어 있지 않습니다 SHLVL
.
ps -o tty= -p$pid
프로세스의 제어 터미널을 표시하며 프로세스가 실행중인 터미널 에뮬레이터 (xterm, screen, sshd,…)를 식별합니다. 다른 쉘에서 쉘을 시작하면 변경되지 않지만 다른 쉘에서 쉘을 시작하면 변경됩니다. 새로운 터미널 에뮬레이터를 시작하십시오. 터미널 에뮬레이터가 기본 Mac 응용 프로그램 인 경우, 내가 모르는 Mac 관련 미묘한 부분이있을 수 있습니다.
ps -o tty= -p$$
그리고 ps -o tty= -p$PPID
다른 출력을 생성해야한다고 말했기 때문입니다. 아니면 내가 잘못 이해 했습니까?
ps -p $$ -p $PPID
(다시 OSX 경험이 없으므로 OSX에서 비정상적인 일이 발생했을 수 있습니다).
ps -p $$ -p $PPID
(미안하지만 형식을 지정하는 방법을 모르겠습니다) PID TTY TIME CMD 209 ttys000 0 : 00.01 login -pf phunehehe 210 ttys000 0 :