특정 전역 매개변수가 구성된 위치를 확인하는 방법

특정 전역 매개변수가 구성된 위치를 확인하는 방법

가능한 중복:
환경 변수의 출처를 확인하는 방법

특정 구성이 존재하는 파일의 위치를 ​​확인할 수 있는 방법이 있는지 궁금합니다. 예를 들어, 전역 매개변수가 있고 TMOUT이를 변경하고 싶지만 그것이 어디에 구성되어 있는지 모릅니다. 나는 알고있다이것여기서 이미 질문한 질문인데, 명령에 따라 변수가 나타나는 순서를 조사하는 것 외에 다른 방법이 있는지 알고 싶습니다 env.

답변1

이 명령은 실행하는 데 시간이 오래 걸리지만(시스템의 모든 파일을 검사하므로) 파일을 찾아야 합니다.

find / -type f -print0 | xargs -0 grep -w 'TMOUT=' /dev/null

또 다른 방법으로는 어떤 상황에서 설정되어 있는지 알아보는 방법이 있는데, 예를 들어 쉘이 로그인 쉘이 아닐 때 설정되는지( env -i bash), 로그인 쉘인지( env -i bash --login)를 확인하는 것이다. $HOME예를 들어 .profile, .env또는 에서 파일을 수동 .bashrc으로 확인할 수 있습니다 .bash_profile. /etc/환경 변수를 지정하는 일부 파일도 있습니다 . 그 중 하나에 설정할 수 있습니다.

로그인 쉘이 이면 ksh 쉘 자체에 의해 설정되었음을 ksh알 수 있습니다 .$TMOUT


편집하다:위 명령줄의 덜 명확한 기능 중 일부를 설명하려면 다음을 수행하세요.

관용구는 find ... -print0 | xargs -0 ...매우 일반적입니다. -print0기본값 대신 사용하는 점 -print은 의 경우 파일 이름이 ASCII NUL로 끝난다는 것입니다 -print0. 이는 실제 개행 문자가 포함된 파일 이름이 올바르게 표시된다는 의미입니다. -0옵션 을 전달하면 동일한 규칙을 이해할 xargs수 있습니다 .xargs

/dev/null일상적 으로 첫 번째 인수로 전달하는 관행 grep도 설명할 가치가 있습니다. 에서 읽을 때만 파일 끝을 얻으므로 /dev/null비어 있지 않은 문자열은 와 일치하지 않습니다 grep. 따라서 해당 파일에 대한 히트가 없습니다. 마지막으로 grep을 실행하는 경우에 올바르게 대처하기 위해 grep 명령줄에서만 지정하므로 xargs검색할 파일이 하나만 남습니다. grep에 파일 인수가 하나만 있는 경우 명령줄을 지정하지 않고 조회수를 나열합니다. 다음과 같습니다:

~/tmp/t$ echo hello > a
~/tmp/t$ echo hi > b
~/tmp/t$ grep '^h.*' a
hello
~/tmp/t$ grep '^h.*' a b
a:hello
b:hi

답변2

귀하의 질문에 대한 정확한 답변은 아니지만 일부 답변이 될 수도 있습니다.

StackOverflow: Linux: 환경 변수는 어디에 저장되나요?

편집하다:

셸 스크립트를 디버깅할 때 일반적으로 -x를 추가합니다. #!/bin/bash -x 다음과 같이 셸에서 실행해 볼 수도 있습니다.bash -x

# su - test

    test$ bash -x
     unset a r
    + . /etc/bash_completion.d/yast2-completion.sh
       **(file sourced)**
    ++ YAST=/sbin/yast
    ++ YAST_MODLIST=()
       **(variables set from file)**
       #....
    ++ /usr/bin/dircolors -b /etc/DIR_COLORS
    + eval 'LS_COLORS='\''no=00
       #....

관련 정보