tam*_*are 60 linux bash centos
我一直认为$HOME并且~完全相同,因此可以互换使用.今天,当我尝试安装pylibmc,一个python绑定到memcached,在我的共享服务器上使用时~给了我错误但没有
$HOME.我想说明原因.
libmemcached是pylibmc的要求.我在我的主目录下安装了libmemcached,因为我在服务器上没有root.因此,要安装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
没有任何问题.看起来问题是波形符没有得到解决.但为什么?
n. *_* m. 33
shell替换~为用户的主目录(更新:或者可能是某个其他用户的主目录,如果~后面跟着a之外的其他用户/),但只有它是单词的第一个字符.
--with-libmemcached=~有~没有开始,所以外壳离开单干.
go2*_*ull 25
~ 仅当它是单词的第一个字符并且它是未加引号时才展开
$ echo "~"
~
$ echo foo~
foo~
$ echo ~
/home/guest
$ echo ~/foo
/home/guest/foo
Run Code Online (Sandbox Code Playgroud)
~username被扩展到HOME了username.
$ echo ~root
/root
$ echo ~invaliduser
~invaliduser
Run Code Online (Sandbox Code Playgroud)
要引用文件名,您应该使用$HOME或引用后缀
$ echo "$HOME/foo bar"
/home/guest/foo bar
$ echo ~/"foo bar"
/home/guest/foo bar
$ echo ~root/"foo bar"
/root/foo bar
Run Code Online (Sandbox Code Playgroud)
请注意以下"POSIX Tilde扩展"
由波浪形扩展产生的路径名应被视为引用,以防止它被字段拆分和路径名扩展改变.
主要区别是:
cd /tmp
ls "$HOME" #works
ls "~" #nope
Run Code Online (Sandbox Code Playgroud)
因此,shell只在少数情况下扩展〜.在你的情况下,python脚本简单地得到了脚本 - 而不是expaded值.
| 归档时间: |
|
| 查看次数: |
16873 次 |
| 最近记录: |