2015-01-08 2 views
2

필자는 왜 PC에서 파일 시스템의 bash 자동 완성이 느린 지 알아 내려고합니다. 필자의 리눅스 컴퓨터는 PAM을 통해 AD에 연결되어 있으며 bash는 자동 완성을 위해 TAB을 사용할 때마다 네트워크 마운트 (PAM을 쿼리하기 때문에 느리다)를 쿼리하려고하는 것으로 의심하고있다.bash 확장을 디버깅하는 방법은 무엇입니까?

나는 set -x을 시도하고 내가 /var에 자동 완성을 수행 할 때 가장 느린 동작은 다음과 같은 라인 : I가 네트워크에 연결하고 때

[[ /var == ~* ]] 

은 또한, 다음 줄은 bash는 실행하는 데 몇 초 정도 걸립니다 이 연결되지 않은 경우 즉시 반환하는 반면 :

TEMP=~* 

나는에 ~*을 확장하거나 해결 방법을 찾기 위해 노력하고 무엇 bash는 알고 싶습니다.

+0

을 알게 될 것이다 예를 에 대한 strace를 그것을 실행하려고'[[$ foo는 = " ~ "*]]''[[$ foo = ~ *]]'보다 훨씬 더 빠릅니다. 물결 확장 기능을 그대로 유지하고 싶다면'[[$ foo = ~/*]]'가 더 빠를 것입니다. 단지 자신의 * 홈 디렉토리에 있는지 여부 만보고 있기 때문입니다. –

+0

그건 그렇고, 당신은 파일과 라인 번호를 모두 포함하는'PS4 '를 설정하는 것을 고려할 수 있습니다, 그래서 당신은 문맥 안에서 잘못된 코드를 볼 수 있습니다. 예를 들면 :'PS4 = ': $ BASH_SOURCE : $ LINENO +''는 당신에게 각 명령의 소스 파일과 라인을 줄 것입니다. –

+0

'getent passwd'는 그 비교에 비교적 오랜 시간이 걸립니까? –

답변

0

이 시스템이 마운트에 액세스하는 경우 그것은 _literal_ 물결표 있는지 알고 싶다면 strace를 에코 $ FOO , 당신은

관련 문제