Linux

如何將postgres結果插入shell變數

  • November 7, 2017

我想在變數中設置所有這些語法

su -l postgres -c "psql -c \"CREATE DATABASE graphite WITH OWNER graphite\""

CREATE DATABASE 

所以我寫了這個

res=$(  su -l postgres -c "psql -c \"CREATE DATABASE graphite WITH OWNER graphite\"" )

CREATE DATABASE 

但是$res是空的

echo $res

我也嘗試添加" "但沒有成功。

如何插入結果

su -l postgres -c "psql -c \"CREATE DATABASE graphite WITH OWNER graphite\""

到 shell 變數?

這個問題有點難以理解。

通過“插入…..的結果”,您是否將數據庫名稱“石墨”作為腳本中其他命令的變數插入?

您如何處理切換使用者時應該出現的密碼提示?或者這個腳本是由 root 執行的?

我很困惑你為什麼要使用這個-l選項——這通常是為了列出命令。你想讓這個命令作為 postgres 執行嗎?然後你應該使用該-u postgres選項,告訴命令以 postgres 使用者身份執行它。

第三,確保您有辦法為 su 使用者輸入憑據/密碼,具體取決於實際執行腳本的使用者。

假設,您可以:

  1. 以 sudo 執行整個腳本,而不是嘗試更改腳本內的使用者,這通常會生成密碼提示。
  2. 你試過使用sudo -u postgres嗎?postgres 使用者必須在 /etc/sudoers 文件中。
  3. 在那張紙條上,您在系統日誌中看到了什麼?執行此腳本並且命令未完成可能存在錯誤。您是否驗證了對庫、postgres 命令和目錄的權限?
  4. 也許試試sudo -u postgres -H -- plsql "CREATE DATABASE graphite WITH OWNER graphite"

下面是這些命令的一個很好的描述和範例: Linux SU、SUDO

引用自:https://serverfault.com/questions/882232