我想在远程服务器(Cent OS 7)上执行命令并使用该服务器上定义的环境变量。但是,当我运行此命令时
ssh [email protected] "PGPASSWORD=$DB_PASS psql -U $DB_USER -d $DB_NAME -c 'COPY myapp_currencyprice to STDOUT WITH (DELIMITER \",\", FORMAT CSV, HEADER)' > /tmp/prices.csv"
似乎该命令正在尝试使用来自 localhost 而不是来自“remotehost.com”的“$DB_PASS”和其他环境变量。从远程服务器引用环境变量的正确方法是什么?
您需要使用单引号来阻止本地 shell 获取字符串:
然后,您需要交换内部引号:
但是,这仍然行不通,因为您
.bash_profile
不会被包括在内,因为您没有使用交互式外壳。此时最明显的解决方案是明确包含它:您可能需要查找这两个参考资料以了解不同类型的引号之间的区别
(评论转换为答案,由 terdon 提出......)
尝试避开 $ 符号以防止局部扩展。喜欢
正如您在评论中提到的那样,究竟是什么不起作用?您是否还用单引号将命令括起来?不要,选择任何一个。