フルパスが指定されていても、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

私はそこから2つのバージョンのsvnadminをコンパイルしました。私が1つを実行すると、私はそれを取得します

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違いが説明される可能性があります。

おすすめ記事