이 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