전체 경로가 제공되더라도 Bash는 프롬프트된 파일과 다른 파일을 실행합니다.

전체 경로가 제공되더라도 Bash는 프롬프트된 파일과 다른 파일을 실행합니다.

제가 모르는 환경 변수나 일부 설정이 있는 것 같은데, 이것이 저를 미치게 만듭니다.

baco:~ # ls -la /root/subversion-1.4.6/subversion/svnadmin/.libs/svnadmin       
-rwxr-x---  1 root root 57263 Mar 10  2008 /root/subversion-1.4.6/subversion/svnadmin/.libs/svnadmin
baco:~ # ls -la /usr/local/subversion-1.6.1/subversion/svnadmin/.libs/svnadmin  
-rwxr-xr-x  1 root root 76125 Apr 20  2009 /usr/local/subversion-1.6.1/subversion/svnadmin/.libs/svnadmin

나는 거기에서 두 가지 버전의 svnadmin을 컴파일했습니다. 내가 하나를 실행하면 나는 그것을 얻습니다

baco:~ # /usr/local/subversion-1.6.1/subversion/svnadmin/.libs/svnadmin --version
svnadmin, version 1.6.1 (r37116)
   compiled Apr 20 2009, 16:09:36

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository back-end (FS) modules are available:

* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.

전체 경로로 다른 하나를 실행하면 여전히 더 일찍 얻을 수 있습니다!

baco:~ # /root/subversion-1.4.6/subversion/svnadmin/.libs/svnadmin --version
svnadmin, version 1.6.1 (r37116)
   compiled Apr 20 2009, 16:09:36

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository back-end (FS) modules are available:

* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.

경로 정보 없이 svnadmin을 실행하면 1.6.1 버전도 얻을 수 있습니다($PATH로 인해). cron을 통해 1.4.6을 실행할 수 있으므로 이는 대화형 또는 로그인 셸에만 해당되어야 합니다.

편집하다:

/root/subversion-1.4.6/subversion/svnadmin/.libs/svnadmin --versioncron 을 실행하고 1.4.6 버전의 출력(올바른 컴파일 날짜 포함)을 얻었 기 때문에 cron이 1.4.6을 실행하고 있다는 것을 알고 있습니다 . 전체 경로를 사용하여 cron을 통해 1.6.1 버전을 실행하면 1.6.1의 출력이 표시됩니다.

둘 다 바이너리 파일입니다.

baco:~ # file /root/subversion-1.4.6/subversion/svnadmin/.libs/svnadmin
/root/subversion-1.4.6/subversion/svnadmin/.libs/svnadmin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped
baco:~ # file /usr/local/subversion-1.6.1/subversion/svnadmin/.libs/svnadmin
/usr/local/subversion-1.6.1/subversion/svnadmin/.libs/svnadmin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped

하드링크도 아닙니다

baco:~ # stat -c %h /usr/local/subversion-1.6.1/subversion/svnadmin/.libs/svnadmin
1
baco:~ # stat -c %h /root/subversion-1.4.6/subversion/svnadmin/.libs/svnadmin   
1

답변1

svnadmin바이너리는 실제 작업(버전 번호 포함)을 수행하기 위해 공유 라이브러리를 래핑하는 코드 레이어인 것처럼 보입니다 . 실제로 를 실행하면 버전 메시지가 출력에 나타나지 않으므로 바이너리의 일부 strings $(which svnadmin)가 아닙니다 .svnadmin

따라서 대화형 세션 간의 LD_LIBRARY_PATH 차이로 인해 cron동작의 차이가 설명될 수 있습니다.

관련 정보