Переменная одинарной кавычки, содержащая переменную - PullRequest
0 голосов
/ 06 марта 2020

Я использую sqlplus для получения данных из столбца, который содержит команду оболочки.

cmd=`sqlplus -s username/password <<EOF
        set heading off
        set trimspool on
        set termout on
        set underline off
        set linesize 2000
        set pagesize 0
        SELECT exec_cmd
          FROM cmd_table
        exit;
        EOF`

exec_cmd содержит переменную оболочки в качестве параметра

$ echo $cmd
script.sh $UP

script. sh:

#!/bin/sh
connection=$1
echo "exit" | `sqlplus -s -l $connection`

Сбой, поскольку $connection содержит буквенную строку $UP вместо значения $UP.

1 Ответ

0 голосов
/ 06 марта 2020

Используйте eval для оценки строки как команды:

eval "$cmd"

Будьте осторожны, так как это будет запускать команду в текущем процессе. Это может изменить переменные или сделать другие неожиданные вещи с вашим сценарием. Было бы безопаснее явно вызывать подоболочку, которая выполняла бы команду в изолированном дочернем процессе:

sh -c "$cmd"

Чтобы последний работал, обязательно экспортируйте UP.

UP='...'
export UP

sh -c "$cmd"

Кроме того, избавьтесь от пробелов вокруг sqlplus в script.sh.

echo "exit" | sqlplus -s -l $connection
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...