Как получить список переменных, извлеченных с использованием sqlplus в bash без создания файла - PullRequest
0 голосов
/ 19 марта 2020

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

Затем я хочу получить эту единственную переменную, чтобы содержимое (которые являются другими переменными) переменной было доступно к сценарию.

Я хочу добиться этого без необходимости буферизовать файл sqlplus, а затем получить этот файл (это уже работает, как я пытался).

Пожалуйста, найдите ниже то, что я пытаюсь:

#!/bin/bash

var_list=$(sqlplus -S /@mydatabase << EOF
set pagesize 0
set trimspool on
set headsep off
set echo off
set feedback off
set linesize 1000
set verify off
set termout off
select varlist from table;
EOF
)

#This already works when I echo any variable from the list
#echo "$var_list" > var_list.dat
#. var_list.dat
#echo "$var1, $var2, $var3"

#Im trying to achieve the following
. $(echo "var_list")
echo "$any_variable_from_var_list"

Содержимое var_list из базы данных выглядит следующим образом:

var1="Test1"
var2="Test2"
var3="Test3"

Я также пытался найти его другими способами, такими как:

. <<< $(echo "$var_list")
. $(cat "$var_list")

Я не уверен если мне нужно читать в каждой строке сейчас, используя какое-то время l oop.

Любой совет приветствуется.

1 Ответ

1 голос
/ 19 марта 2020

Вы можете:

. /dev/stdin <<<"$varlist"

<<< - это строка здесь. Он перенаправляет содержимое данных за <<< на стандартный ввод.

/dev/stdin представляет стандартный ввод. Таким образом, чтение из файлового дескриптора 0 похоже на открытие /dev/stdin и вызов read() в результирующем файловом дескрипторе.

Поскольку команде source требуется имя файла, мы передаем is /dev/stdin и перенаправляем данные в быть прочитанным к стандартному вводу. Таким образом, source читает команды из стандартного ввода, думая, что читает из файла, в то время как мы передаем наши данные на вход, который мы хотим передать.

Использование /dev/stdin для инструментов, которые ожидают, что файл довольно распространен , Я понятия не имею, какие ссылки дать, я буду ссылаться: bash руководство здесь строки , Базовые определения Posix 7 2.1.1p4 последняя точка маркера , linux документация ядра в каталоге / dev / содержит , bash встроенные оболочки вручную , возможно C99 7.19.3p7 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...