したがって、SQLクエリから返された最初の列の値を変数(var
)に格納します。 SQLクエリは複数の行を返し、後でこの値がコマンドに使用されるため、配列型でなければなりません。
シェルスクリプトで異なる変数を使用して同じコマンドを順番に実行する方法がわかりません。
var=`app/oracle/product/10.2.0/bin/sqlplus -s user/passwd<< !EOF!
set pages 0 echo off feed off timing off
select entity_name,uid,set_date from table_name;
exit
!EOF!`
実行するコマンドは次のとおりです。
X=$var Y=`date` ./test.sh
答え1
あなたの要求は不明です。スクリプトを変更できますか?そうでない場合X
とY
変数に明示的に依存する場合は、一時/ループ変数が必要です。test.sh
各配列要素に対して実行するには、for
ループを試してみてください(要素に空白文字がない場合)。
for TMP in "${var[@]}"; do X="$TMP" Y=$(date) ./test.sh; done
答え2
データベースクエリの出力を変数に保存する必要はありません。
app/oracle/product/10.2.0/bin/sqlplus -s user/passwd <<END_SQL | while IFS= read -r thing; do X="$thing" Y="$(date)" ./test.sh; done
set pages 0 echo off feed off timing off
select entity_name,uid,set_date from table_name;
exit
END_SQL
これはコマンドの出力を読み取り、各行に対して一度にスクリプトを呼び出してプロセスの環境変数の値を設定しますsqlplus
。X
Y