この 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