bash 또는 sh 호출 방법 결정

bash 또는 sh 호출 방법 결정

bashbash 또는 sh 쉘에서 or 명령, 로그인 쉘, xterm을 사용하여 호출되었는지 어떻게 확인하고 sh, 그렇다면 어떻게 호출되었습니까?

예를 들어 bashxterm에서 호출한 다음 해당 인스턴스 내에서 다시 호출하면 다음과 같은 결과가 출력될 수 있습니다.

me@mylinuxmachine:~$ bash
me@mylinuxmachine:~$ bash
me@mylinuxmachine:~$ magic_command
Called by /bin/bash {
    Called by /bin/bash {
        Called by xterm
    }
}

답변1

다음을 위해 사용할 수 있습니다 pstree:

$ bash
bash-4.4$ pstree -p "$$"
-+= 00001 root /sbin/init
 \-+= 85460 kk tmux: server (/tmp/tmux-1000/default) (tmux)
   \-+= 96572 kk -ksh93 (ksh93)
     \-+= 72474 kk bash
       \-+= 14184 kk pstree -p 72474
         \-+- 51965 kk sh -c ps -kaxwwo user,pid,ppid,pgid,command
           \--- 91001 kk ps -kaxwwo user

pstree유틸리티는 현재 시스템에서 실행 중인 모든 프로세스의 상위-하위 관계를 표시합니다. -p "$$"현재 셸과 관련된 프로세스(프로세스 ID가 변수에 저장되어 있음 $) 만 포함하도록 출력을 제한 할 수 있습니다 .

현재 쉘에 도달하는 지점에서 출력을 차단하려면 다음을 사용할 수 있습니다 sed.

bash-4.4$ pstree -p "$$" | sed "/= $$ /q"
-+= 00001 root /sbin/init
 \-+= 85460 kk tmux: server (/tmp/tmux-1000/default) (tmux)
   \-+= 96572 kk -ksh93 (ksh93)
     \-+= 72474 kk bash

내가 사용하는 것(OpenBSD에서)과 다른 유틸리티를 사용하여 구현된 Linux 시스템의 경우 다음을 사용할 수 있습니다.

$ pstree -salup "$$"

비슷한 출력을 얻고

$ pstree -salup "$$" | sed "/,$$\$/q"

현재 쉘에 도달하는 지점에서 출력을 차단합니다.

다음은 주어진 PID(또는 생략된 경우 현재 쉘의 PID)에 대해 위의 작업을 수행하는 쉘 함수 pls("프로세스 ls"에 대해 제가 생각할 수 있는 최선입니다)입니다.

function pls
{
  local pid="${1:-$$}"
  pstree -salup "$pid" | sed "/,$pid\$/q"
}

관련 정보