Bash

在本地執行 ssh 命令時,如何從遠端機器引用環境變數?

  • December 12, 2021

我想在遠端伺服器(Cent OS 7)上執行命令並使用該伺服器上定義的環境變數。但是,當我執行此命令時

ssh myuser@remotehost.com "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 獲取字元串:

ssh myuser@remotehost.com 'stuff here...'

然後,您需要交換內部引號:

ssh myuser@remotehost.com '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 myuser@remotehost.com '. .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'

您可能需要查找這兩個參考資料以了解不同類型的引號之間的區別

引用自:https://unix.stackexchange.com/questions/681092