确认当前工作目录是基于索引节点号,而不是您查找到的索引。由于使用的是bash,因此可以按以下方式使用$ PWD来cd到同名的新目录:
cd $ PWD
为了说明,我做了一个虚拟的deploy命令:
set -x
cd ~/tmp
rm -rf code
mkdir code
echo echo hello from $* > code/run
chmod +x code/run
创建了第一个部署,将其CD编码,然后使用来检查内容,ls -lai
以便您可以看到inode:
ianh@abe:~/tmp$ ./,deploy first
++ cd /home/ianh/tmp
++ rm -rf code
++ mkdir code
++ echo echo hello from first
++ chmod +x code/run
ianh@abe:~/tmp$ cd code
ianh@abe:~/tmp/code$ ls -lai
total 12
22945913 drwxr-xr-x 2 ianh ianh 4096 Apr 9 23:12 .
22937618 drwxrwxr-x 14 ianh ianh 4096 Apr 9 23:12 ..
22939455 -rwxr-xr-x 1 ianh ianh 22 Apr 9 23:12 run
现在运行第二次部署
ianh@abe:~/tmp/code$ ../,deploy 2nd
++ cd /home/ianh/tmp
++ rm -rf code
++ mkdir code
++ echo echo hello from 2nd
++ chmod +x code/run
并检查目录内容...现在目录中没有任何内容!甚至不 '。' 和“ ..”!从中可以看出,bash在运行时未使用“ ..”目录条目,cd ..
因为“ ..”不再存在-我认为它是$ PWD处理的一部分。cd ..
在这种情况下,某些其他/较旧的shell无法处理,您必须先cd到绝对路径。
ianh@abe:~/tmp/code$ ls -lai
total 0
镉到 $PWD
然后重试:
ianh@abe:~/tmp/code$ cd $PWD
ianh@abe:~/tmp/code$ ls -lai
total 12
22945914 drwxr-xr-x 2 ianh ianh 4096 Apr 9 23:12 .
22937618 drwxrwxr-x 14 ianh ianh 4096 Apr 9 23:12 ..
22939455 -rwxr-xr-x 1 ianh ianh 20 Apr 9 23:12 run
ianh@abe:~/tmp/code$ ./run
hello from 2nd
请注意当前目录(。)的索引节点如何更改?
如果您的部署脚本将旧目录移动到其他名称(例如mv code code.$$
,在上面的.deploy脚本中),则./run
可以使用,但是在使用之前,cd $PWD
您将运行旧目录代码,而不是新代码。
ianh@abe:~/tmp/code$ ./run
hello from 2nd
ianh@abe:~/tmp/code$ ../,deploy 3rd
++ cd /home/ianh/tmp
++ '[' -d code ']'
++ mv code code.9629
++ mkdir code
++ echo echo hello from 3rd
++ chmod +x code/run
ianh@abe:~/tmp/code$ ./run
hello from 2nd
ianh@abe:~/tmp/code$ cd $PWD
ianh@abe:~/tmp/code$ ./run
hello from 3rd
使用capistrano进行部署存在相同的问题(它们具有从当前名称到当前发行版的符号链接),因此我使用别名来cd到生产/暂存区域,并适当地设置RAIL_ENV:
alias cdp='export RAILS_ENV=production; echo RAILS_ENV=$RAILS_ENV ; cd /var/www/www.example.com/current'
alias cds='export RAILS_ENV=staging; echo RAILS_ENV=$RAILS_ENV ; cd /var/www/staging.example.com/current'