ksh — как выполнить команду параметрическим способом?

#sh #psql #ksh

#ш #psql #кш

Вопрос:

У меня есть ниже команда psql, которая работает нормально:

 psql --echo-queries -v ON_ERROR_STOP=0 -v GROUP_ID=${id} ${PS_USER}:${PS_PASS}@${PS_INST}:${PS_PORT}/${PS_DB} lt;lt; EOF 1 gt; ${log_file} 2gt;amp;1 set AUTOCOMMIT OFF INSERT INTO city (city_id, city, country_id) VALUES (1000,'TEST1', 1); EOF   

Я бы хотел, чтобы код был более чистым, заранее подготовив строку подключения и выполнив ее при необходимости, что-то вроде:

  #preparing the connection string ps_connection="${PS_USER}:${PS_PASS}@${PS_INST}:${PS_PORT}/${PS_DB}"   psql --echo-queries -v ON_ERROR_STOP=0 -v GROUP_ID=${id} ${ps_connection} lt;lt; EOF 1 gt; ${log_file} 2gt;amp;1 set AUTOCOMMIT OFF .... EOF  

Когда я делаю то же самое с sqlplus, он работает:

  sqlplus -s $curr_connection lt;lt; EOF 1gt;gt; ${log_file} 2gt;amp;1  ....  

По какой причине он не работает с psql?

Я также хорошо справляюсь с подготовкой полной команды psql, я попробовал eval и exec и не сработал:

  ps_connection="psql --echo-queries -v ON_ERROR_STOP=0 -v GROUP_ID=${id}   ${PS_USER}:${PS_PASS}@${PS_INST}:${PS_PORT}/${PS_DB}"  #also tried exec ${ps_connection} eval ${ps_connection} lt;lt; EOF 1 gt; ${log_file} 2gt;amp;1 set AUTOCOMMIT OFF .... EOF   

Получение :

 psql: could not connect to server: No such file or directory  Is the server running locally and accepting  connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?  

Комментарии:

1. Определите «не работает». Что же происходит и чем это отличается от ожиданий?

2. @glennjackman — Я редактирую сообщение с ошибкой ,которую получаю, надеюсь, теперь это яснее

3. Возможно, файл сценария содержит окончания строк в стиле DOS, поэтому ps_connection строка заканчивается r символом. Однако я не знаю, вызовет ли это ту конкретную ошибку.