ksh 스크립트에서 무한 루프를 생성하지 않고 sqlcmd
with 옵션을 사용할 수 있는 방법이 있습니까 ?-i input_file
- 코드는 한 줄씩 읽고
$file
이를 구문 분석하여 데이터를 추출하고 다른 작업을 처리합니다. $file
"읽기 " 위해 파일 설명자 리디렉션을 사용합니다stdin
.
무한 루프 코드:
exec 3<&0
exec 0<"${file}"
while read -r line || [[ -n ${line} ]]
do
echo "${line}"
sqlcmd -S svr -U usr -P pwd -i input_file >/dev/null 2>&1
done
exec 0<&3
exec 3<&-
echo "Script completed successfully!"
산출:
line 1 ...
line 1 ...
...
line 1 ...^C
해결책(사용여기 문서옵션 대신 -i input_file
):
exec 3<&0
exec 0<"${file}"
while read -r line || [[ -n ${line} ]]
do
echo "${line}"
sqlcmd -S svr -U usr -P pwd <<-EOF
-- SOME SQL CODE HERE
EOF
# here document lines are indented with tabs, not whitespaces.
done
exec 0<&3
exec 3<&-
echo "Script completed successfully!"
산출:
line 1 ...
line 2 ...
line 3 ...
Script completed successfully!
이 문제에 대한 해결 방법이 있더라도 이 동작의 원인이 무엇인지, 옵션을 sqlcmd
비활성화하지 않고 도구를 사용하는 방법을 알고 싶습니다 -i input_file
.
노트:
- SQL Server용 Microsoft ODBC 드라이버 11.
- 레드햇 엔터프라이즈 리눅스 6.7(KornShell).
답변1
@meuh가 댓글에서 언급했듯이 sqlcmd
,표준 입력그래서 추가는 </dev/null
이 문제를 해결합니다. 문제는 루프가 while
반복 된다는 것입니다.표준 입력(file에서 리디렉션하기 전 exec 0<"${file}"
) 및 file sqlcmd
에서 while
읽기를 시도합니다.표준 입력. 해결책은 대신에 sqlcmd
읽기를 만드는 것입니다./dev/null
표준 입력.
고정시키다
exec 3<&0
exec 0<"${file}"
while read -r line || [[ -n ${line} ]]
do
echo "${line}"
sqlcmd -S svr -U usr -P pwd -i input_file </dev/null
done
exec 0<&3
exec 3<&-
echo "Script completed successfully!"