Как я могу запускать контейнер cpp при каждой перезагрузке?

Вот некоторые альтернативы, похожие на ответ тердона , которые пытаются упростить обработку вывода SQL *Плюс, учитывая, что вы пытаетесь получить его в переменную оболочки ID_VAL.

По умолчанию операторы SQL, выполняемые в SQL *Plus, создают форматированные отчеты, состоящие из столбцов, ширина которых зависит от соответствующих типов данных. Это приведет к некоторым возможным нежелательным эффектам :, например, к левым -дополненным числам, которые вы указали в комментарии .

Демонстрация:

$ DB_CONNECT="user/password@db"
$ ID_VAL="$(sqlplus -s $DB_CONNECT <<'END'
set feedback off
set head off
set pagesize 0
SELECT 123 FROM DUAL
/
END
)"
$ printf '"%s"\n' "$ID_VAL"
"       123"
$ printf '%s' "$ID_VAL" | od -An -tx1
 20 20 20 20 20 20 20 31 32 33

Некоторые альтернативы:

  1. Если вы выбираете число, преобразуйте его в строку и обрежьте в своем операторе SQL. Поскольку все остальное в приведенном выше скрипте не изменилось (, я продолжу использовать свой фиктивный оператор SELECTдля простоты тестирования ):

    .
    SELECT TRIM(TO_CHAR(123)) FROM DUAL;
    
  2. Используйте dbms_output.put_lineв блоке PL/SQL:

    ID_VAL="$(sqlplus -s $DB_CONNECT <<'END'
    set serveroutput on
    set feedback off
    DECLARE
    myvar NUMBER;
    BEGIN
    SELECT 123 INTO myvar FROM DUAL;
    dbms_output.put_line(myvar);
    END;
    /
    END
    )"
    

    Обратите внимание, что set serveroutput onявляется обязательным, в противном случае вывод не отображается.

С помощью (1 )и (2 )вы получите:

$ printf '"%s"\n' "$ID_VAL"
"123"
$ printf '%s' "$ID_VAL" | od -An -tx1
 31 32 33

Обратите внимание, однако, что эти подходы не сработают, если вы выбираете строку с пустыми символами по бокам, которые вы хотите сохранить (, например. foo ). Вы можете заключить эту строку в кавычки и удалить их впоследствии, или:

  1. Разрешить SQL *Plus форматировать выходные данные как CSV:

    ID_VAL="$(sqlplus -s -M "CSV ON" $DB_CONNECT <<'END'
    set feedback off
    set head off
    SELECT '  foo  ' FROM DUAL;
    END
    )"
    printf '"%s"\n' "$ID_VAL"
    ""  foo  ""
    

    В отличие от чисел, строки заключаются в двойные -кавычки, что требует некоторой постобработки -. Предполагая, что возвращаемое значение не содержит символов, одним из способов может быть использование sedдля удаления начального и конечного "символов (все остальное без изменений):

    ID_VAL="$(sqlplus -s -M "CSV ON" $DB_CONNECT <<'END' | sed 's/^"//; s/"$//;'
    

Лучший вариант зависит от вашего фактического варианта использования.

-1
22.09.2021, 07:37
1 ответ

Я нашел решение. Это конфигурация служебного файла:

[Unit]
Description=Script that will execute my bin

[Service]

ExecStart=/home/nvidia/Desktop/daemonScripts/daemonVDM.sh
Environment="DISPLAY=:1"
Environment="XAUTHORITY=/run/user/1000/gdm/Xauthority"
RestartSec=30
Restart=always
[Install]
WantedBy=multi-user.target
0
23.09.2021, 10:52

Теги

Похожие вопросы