Google Compute Engine에 우분투를 설치하면 여러 시작 파일이 있습니다.
현재 사용 중인 셸에서 어떤 시작 파일을 사용하고 있는지 알려주는 명령이 있나요?
답변1
쉘이 일반적으로 시작 시 읽는 파일 목록은 몇 개로 제한됩니다. 그러나 그들은 차례로원천다른 것들은 복잡한 완성 시스템을 로드할 때와 같이 매우 큰 숫자가 될 수 있습니다.
한 가지 방법은 다음을 사용하여 셸을 실행하는 것입니다.
strace -e open your-shell
truss
(또는 // tusc
... 와 같은 시스템의 해당 명령 dtruss
)
그러면 쉘에서 열린 모든 파일이 나열됩니다. 또한 열었던 파일과 시작되지 않은 파일, 시도했지만 열 수 없었던 파일도 나열됩니다.
xtrace
또 다른 접근 방식은 쉘이 각 명령에 대해 수행할 작업을 stderr에 인쇄하는 일부 쉘 모드를 사용하는 것입니다 . 이렇게 하려면 -x
이 옵션을 사용하여 셸을 호출하기만 하면 됩니다.
기본적으로 일부 셸은 zsh
실행 중인 코드가 있는 파일의 경로를 인쇄합니다( 예를 들어 함수 내에서 실행되는 코드의 파일 이름을 인쇄하는 등 PS4
으로 설정할 수도 있음). 또는 +%x>
같은 다른 경우에는 변수를 수정하여 인쇄하도록 할 수 있습니다 .bash
ksh93
$PS4
PS4='+$BASH_SOURCE> ' bash -x
PS4='+${sh.file}> ' ksh93 -x
PS4='+%x> ' zsh -x
를 사용하면 bash
파일의 고유 경로만 보존되도록 출력을 사후 처리할 수 있습니다. 예를 들면 다음과 같습니다.
PS4=' <:>$BASH_SOURCE<:>' BASH_XTRACEFD=3 3> >(
awk -F'<:>' 'NF>2 && !seen[$2]++ {print $2}') bash -x
(시작 파일 경로에 개행 문자가 포함되어 있지 않거나 <:>
포함된 시작 파일에서 여러 줄 명령이 실행되지 않는다고 가정 <:>
)
이러한 xtrace
기반 방법은 비어 있거나 주석 또는 함수 정의만 포함하는 시작 파일을 나열하지 않으며(해당 함수가 나중에 실행되지 않는 한) 쉘이 존재하는 경우 처리할 시작 파일도 나열하지 않습니다.
그러나 함수가 정의된 파일을 검색할 수 있습니다.
eval "(shopt -s extdebug; declare() { typeset -F \"\$2\"; }
$(typeset -F))" | cut -d ' ' -f 3- | sort -u
그리고 bash
또는
type ${(k)functions} | sed -n 's/.*is a shell function from //p' | sort -u
그리고 zsh
.