bash가 호출된 횟수를 표시하는 방법은 무엇입니까? [복사]

bash가 호출된 횟수를 표시하는 방법은 무엇입니까? [복사]

개발 중에 환경 변수를 유지하기 위해 프로젝트에서 래퍼 스크립트를 사용하는 경우가 많습니다.

shell.sh:

#!/bin/bash
export PATH=$PWD/bin:$PATH
export USERNAME=foo
export PASSWORD=bar
export DB_SERVER=http://localhost:6001
bash

그러면 프로젝트 환경이 설정되고 대화형 bash 세션이 시작됩니다. 이 예는 쉘 스크립트이지만 실제로는 다음과 같은 구성 내에서 이 작업을 가장 자주 수행합니다.파일 레시피 만들기, 그게 중요하다면.

문제는 이러한 세션에 참여하면 프로젝트 환경 외부의 세션과 시각적으로 구별하기 어려운 경우가 많다는 것입니다. 실수로 이러한 스크립트를 여러 번 실행하여 여러 수준의 중첩된 bash 세션 내에서 실행될 수도 있습니다.

bash나는 bash 하위 세션에 있는지 또는 부모 bash 세션에 있는지 더 쉽게 알 수 있도록 호출 횟수를 나타내는 일부 값을 명령 프롬프트에 표시하는 방법이 있기를 바랐습니다 .

여기에 나열된 일부 bash 변수가 표시됩니다. https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Variables

특히 BASH_SUBSHELL서브쉘의 수준을 계산하는 함수가 있지만 이는 실제로 서브쉘이 아니기 때문에 이 목적으로 사용할 수 없습니다.

$ (echo $BASH_SUBSHELL)
1
$ (echo $BASH_SUBSHELL; bash)
1
$ echo $BASH_SUBSHELL
0

이 카운터를 유지하는 다른 방법이 있나요? 그렇다면 bash 프롬프트에 무언가를 쉽게 추가하여 터미널에 이를 더 명확하게 표시할 수 있습니다.


다음은 위 스크립트를 사용한 주석을 기반으로 다양한 방법을 비교한 것입니다.

# inside top-level parent session
$ echo $$ $BASHPID $BASH_SUBSHELL $SHLVL
32336 32336 0 1

# invoke the script to enter a new bash session
$ ./test.sh

$ echo $$ $BASHPID $BASH_SUBSHELL $SHLVL
39541 39541 0 3

$BASH_SUBSHELL새로운 쉘 레벨을 반영하지 않습니다.

관련 정보