어떤 파일에 변수 정의가 포함되어 있는지 어떻게 알 수 있나요?

어떤 파일에 변수 정의가 포함되어 있는지 어떻게 알 수 있나요?

내 OS에서:

echo $CLUTTER_IM_MODULE
fcitx5

어떤 파일에 변수 정의가 포함되어 있는지 어떻게 알 수 있나요?
.bashrc 또는 /etc/bash.bash에서 env를 정의할 수 있다는 것을 알고 있습니다.
문자열이 포함된 파일을 가져오는 데는 많은 시간이 걸립니다 CLUTTER_IM_MODULE.

sudo grep  -r  CLUTTER_IM_MODULE  /

목표를 달성하는 현명한 방법이 있나요?

답변1

변수가 쉘 프로필 스크립트에 정의되어 있다고 확신하는 경우그리고locate확장된 정규식과 NUL로 구분된 출력(예: mlocate또는 ) 을 지원하는 버전이 있는 경우 plocate다음과 같이 실행할 수 있습니다(실행하는 것보다 훨씬 빠릅니다 grep -r).

locate -0 --regex '/(\.(bash_)?profile|(bash)?\.?bashrc|etc/profile.d/|etc/environment$)' |
  xargs -0r grep -H '[^$]CLUTTER_IM_MODULE='

노트:

  1. grep 옵션은 -H파일 이름이 하나만 반환되더라도 파일 이름이 항상 출력과 일치하도록 보장합니다 locate(가능성은 낮지만 -H를 사용해도 아무런 해가 없습니다).

  2. 대소문자를 구분하지 않는 일치를 위해 grep 옵션을 사용할 수도 있습니다 -i.

  3. 셸 프로필 스크립트가 다른 위치에서 발견되거나 다른 이름을 가질 수 있는 경우 정규식을 적절하게 조정해야 합니다. 예를 들어, 내 원래 정규 표현식에는 검색 기능(일부 시스템에서 쉘 변수를 정의할 수 있는 또 다른 위치)이 없었기 /etc/environment때문에 이를 추가했습니다.

  4. 이것은 변수가 어떤 파일인지 알려주지 않으며 말할 수도 없습니다.예전에는실제로 정의되어 있으면 파일만 표시할 수 있습니다.가능한변수의 현재 값을 담당합니다(어떤 변수가 실제로 실행되었는지 알 수 없으며 변수가 스크립트에 설정되었다는 것만 볼 수 있습니다).

  5. locate데이터베이스는 일반적으로 하루에 한 번만 업데이트됩니다. 마지막 실행 이후에 프로필 스크립트가 생성된 경우 파일을 찾을 수 없습니다.

  6. 파일 권한에 따라 다음 명령을 실행해야 할 수도 있습니다.

    sudo locate ... | xargs -0r sudo grep -H
    

답변2

Bash는 이것을 추적하지 않습니다. 다른 파일에서 CLUTTER_IM_MODULE을 찾아보세요.

관련 정보