SSHコマンドをローカルで実行するときにリモートコンピュータの環境変数を参照する方法は?

SSHコマンドをローカルで実行するときにリモートコンピュータの環境変数を参照する方法は?

リモートサーバー(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"

コマンドが「remotehost.com」ではなく、localhostの「$ DB_PASS」やその他の環境変数を使用したいようです。リモートサーバーで環境変数を参照する正しい方法は何ですか?

ベストアンサー1

ローカルシェルが文字列を取得しないようにするには、単一引用符を使用する必要があります。

ssh [email protected] 'stuff here...'

その後、内部引用符を置き換える必要があります。

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'

.bash_profileただし、対話型シェルを使用していないため含まれていないため、まだ機能しません。この時点で最も明白な解決策は、これを明示的に含めることです。

ssh [email protected] '. .bash_profile; PGPASSWORD=$DB_PASS psql -U $DB_USER -d $DB_NAME -c "COPY myapp_currencyprice to STDOUT WITH (DELIMITER \",\", FORMAT CSV, HEADER)" > /tmp/prices.csv'

さまざまな種類の引用符の違いを理解するには、これら2つの参考文献を見つけてください。

おすすめ記事