[-f / path / to / file]没有回复

时间:2013-11-30 19:29:33

标签: bash ruby-on-rails-3.2 capistrano

我正在努力让我的Capistrano部署脚本正常工作,但它没有进行符号链接,因为它配置如下所示。

set :linked_files, %w{config/database.yml}
set :linked_dirs, %w{log tmp vendor/bundle public/system}

当它运行相关命令时,我得到以下内容:

WARN [SKIPPING] No Matching Host for /usr/bin/env [ -f /path/to/shared/config/database.yml ]

如果我在服务器上运行此命令,无论是通过ssh还是通过登录到服务器并运行命令,我都没有得到命令的响应。

user: ~
$ [ -f /path/to/shared/config/database.yml ]
user: ~
$

该文件确实存在于指定位置并具有权限。

user: ~
$ ll /path/to/shared/config/
total 4.0K
drwxrwxr-x 2 user group  33 Nov 30 10:58 .
drwxrwxr-x 7 user group  89 Nov 30 10:58 ..
-rwxrwxr-x 1 user group 805 Nov 30 10:58 database.yml
user: ~

这不应该返回真或假,而不是什么?是否有我可能已更改的配置会抑制输出?无论文件是否存在,我都没有得到任何回复。

1 个答案:

答案 0 :(得分:0)

在您对实际问题的回复中,test[是别名)确实将输出返回到stdout。它返回退出代码。

user: ~
$ [ -f /path/to/shared/config/database.yml ] # if the file exists
user: ~
$ echo $?
0

user: ~
$ [ -f /path/to/shared/config/database.yml ] # if the file does not exist
user: ~
$ echo $?
1
如果文件存在,

test -f /path/to/file(或[ -f /path/to/file ])会产生退出代码0,如果不存在,则会1。如果要检查文件是否存在并回显其路径,请尝试:

[ -f /path/to/file ] && echo "/path/to/file"