当位置存储在变量中时,为什么不能查找文件?

时间:2016-12-01 21:42:13

标签: linux bash postgresql unix

我正在尝试编写.pgpass文件,如果它在postgres用户的主目录中不存在。

目前我有

local PASS="~postgres/.pgpass"
echo "*:*:*:*:$PWD" >> $PASS

并且~postgres/.pgpass: No such file or directory失败。

但是,不使用变量有效。

echo "*:*:*:*:$PWD" >> ~postgres/.pgpass

两者之间的区别是什么?如何将文件存储在变量中并使其正常工作?

2 个答案:

答案 0 :(得分:2)

local PASS=~postgres/.pgpass
echo "*:*:*:*:$PWD" >> "$PASS"

答案 1 :(得分:-1)

有几件事,

Bash:~是一个shell扩展。

~并非作为路径存在。

f="~/"
ls $f 

会出错

ls: cannot access '~/': No such file or directory

相反,请使用变量$HOME

错误或错误的文件:~postgres / .pgpass

这是一个拼写错误,你想要在Unix上~/.pgpass$HOME/.pgpass。来自the pg docs on the Password File

  

用户主目录中的文件.pgpass或PGPASSFILE引用的文件可以包含在连接需要密码时使用的密码(否则未指定密码)。在Microsoft Windows上,该文件名为%APPDATA%\ postgresql \ pgpass.conf(其中%APPDATA%引用用户配置文件中的Application Data子目录)。