Bashスクリプトで単一のsqlcmdセッションを使用する方法

Bashスクリプトで単一のsqlcmdセッションを使用する方法

この Bash スクリプトは、filesデータベース配列の各ファイルを実行します。ただし、各ファイルに対して新しいsqlcmdセッションを作成します。ループの前に単一のsqlcmdセッションを作成し、そのセッションを使用してすべてのファイルを実行する方法はありますか?

#!/bin/bash

# declare and initialize an array of files to be executed (listed in sequence of execution)
declare -a files=(
    '0140_Items.sql'
    '0170_Warehouses.sql'
    '0190_ItemsAtWarehouses.sql'
)

# loop through files array to execute each file on database
for file in "${files[@]}"
do
   sqlcmd -S SQLDEV14 -E -d D7stage -i ".\Modules\\$file" -m 1
done

それでは構文は何ですか?これを行う方法についてブログやフォーラムを検索しましたが、有用な情報が見つかりませんでした。

答え1

私は最終的にこれをしました:

# loop through files array and build a string of comma separated input files in variable called inputFiles
for file in "${files[@]}"
do
   inputFiles+=".\Modules\\$file"
done
# echo $inputFiles

# execute multiple input files on database using one sqlcmd session
sqlcmd -S SQLDEV14 -E -d D7stage -i $inputFiles -m 1

答え2

たとえば、シェルを使用している場合は、ファイルをリンクしてbash単一のエンティティにパイプすることができます。

sqlcmd -S SQLDEV14 -E -d D7stage -i <(cd Modules && cat "${files[@]}") -m 1

関連情報