GUI의 "터미널에서 실행"으로 bash 스크립트가 시작되었는지 확인하는 방법은 무엇입니까?

GUI의 "터미널에서 실행"으로 bash 스크립트가 시작되었는지 확인하는 방법은 무엇입니까?

bash 스크립트를 실행합니다. 터미널에서 실행하고 "터미널에서 실행"을 사용하여 GUI에서 실행하고 대화식으로 실행한 후 종료하고 싶습니다 bash.여기에 설명된 대로 출력을 확인하세요.: 에 추가하세요 read -rn1.

질문X:
나는 마지막에 bash와 동일한 터미널을 갖고 exit스크립트가 터미널과 GUI에서 실행되는 경우 하나로 닫을 수 있는 "깨끗한" 솔루션을 원합니다. 을 추가할 수 있지만 터미널에서 실행하는 경우 터미널을 닫는 데 bash -i두 시간이 걸립니다 . 결과는 동일합니다.exitexec bash -i

"터미널에서 실행"을 통해 GUI에서 실행되었는지 확인하는 방법이 스크립트에 있습니까?

댓글당 1개 추가:

ps aux | grep aaaa # while script started from GUI was running
mint       53293  0.1  0.0  11216  3356 pts/3    Ss+  21:58   0:00 /bin/bash /home/mint/aaaaa.sh

Ss+대신 터미널에서 실행하는 것과 차이점을 확인하세요 S+.

답변1

귀하의 bash 스크립트 이름이 지정되었다고 가정합니다./path/to/mybashscript.sh

ps조회 에 사용됩니다 mybashscript.sh( $0스크립트 내에서 실행되는 경우). state/stat특정 상태를 식별하는 열이 포함됩니다.

ps --sort +pid -eo pid,stat,command | grep "$0" | head -1 | awk '{print $2}' | grep "s"

또는 행을 필터링하는 다른 방법은 다음과 같습니다 grep.

ps -eo pid,stat,command | grep "$0" | grep -v grep | awk '{print $2}' | grep "s"

귀하의 의견에 따르면 차이점은 다음을 추가했기 때문입니다 s. s is a session leaderGUI 방식의 경우 Ubuntu에는 파일 관리자에서 스크립트를 시작하여 확인하는 방식이 없습니다.

에서 man ps상태 코드는 다음과 같습니다.

PROCESS STATE CODES
   Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display
   to describe the state of a process:

           D    uninterruptible sleep (usually IO)
           I    Idle kernel thread
           R    running or runnable (on run queue)
           S    interruptible sleep (waiting for an event to complete)
           T    stopped by job control signal
           t    stopped by debugger during the tracing
           W    paging (not valid since the 2.6.xx kernel)
           X    dead (should never be seen)
           Z    defunct ("zombie") process, terminated but not reaped by its parent

   For BSD formats and when the stat keyword is used, additional characters may be displayed:

           <    high-priority (not nice to other users)
           N    low-priority (nice to other users)
           L    has pages locked into memory (for real-time and custom IO)
           s    is a session leader
           l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
           +    is in the foreground process group

관련 정보