81

$HOME~はまったく同じで、同じ意味で使用できるとずっと思っていました。今日、memcached への python バインディングであるpylibmc~を共有サーバーにインストールしようとすると、 を使用するとエラーが発生しましたが、 $HOME. 理由を述べたいと思います。

libmemcachedはpylibmcの要件です。サーバーにルートがないため、ホームディレクトリにlibmemcached をインストールしました。その結果、pylibmcをインストールするには、インストール スクリプトがlibmemcachedの場所を認識していることを確認する必要があります。

を実行するpython setup.py install --with-libmemcached=~と、インストール スクリプトが実行されます。

gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall \
  -Wstrict-prototypes -fPIC -DUSE_ZLIB -I~/include \
  -I/usr/local/include/python2.7 -c _pylibmcmodule.c \
  -o build/temp.linux-i686-2.7/_pylibmcmodule.o -fno-strict-aliasing

これにより、libmemcachedが見つからないというエラーが発生します。

に変更する--with-libmemcached=$HOMEと、スクリプトが実行されます

gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall \
  -Wstrict-prototypes -fPIC -DUSE_ZLIB -I/home/waterbotte/include \
  -I/usr/local/include/python2.7 -c _pylibmcmodule.c \
  -o build/temp.linux-i686-2.7/_pylibmcmodule.o -fno-strict-aliasing

問題なく。チルダが解決されないことが問題のようです。しかし、なぜ?

4

5 に答える 5

56

チルダはシェル拡張の一部です(bash、csh、zshなど)。変数はエクスポート可能であり、$HOME特定のシェルに関係なく使用できます。

于 2012-07-20T21:49:34.003 に答える
40

シェルは~、ユーザーのホーム ディレクトリ ( update~ : または、 a 以外のものが続く場合は、おそらく他のユーザーのホーム ディレクトリ) に置き換えますが/、それが単語の最初の文字である場合に限ります。

--with-libmemcached=~最初は持って~いないので、シェルはそれをそのままにしておきます。

于 2012-07-20T21:52:27.247 に答える
11

主な違いは次のとおりです。

cd /tmp
ls "$HOME" #works
ls "~" #nope

そのため、シェルで ~ を展開するのは、いくつかの状況でのみです。あなたの場合、pythonスクリプトは単純に〜をスクリプト内に取得しました-拡張された値ではありません。

于 2012-07-20T22:12:03.753 に答える