내 ksh 스크립트에서 무한 루프를 만들지 않고 옵션 sqlcmd
과 함께 사용하는 방법이 -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
.
메모:
@meuh가 주석에서 언급했듯이 stdinsqlcmd
을 읽고 있었으므로 추가 하면 문제가 해결되었습니다. 문제는 것이 었습니다 루프가 반복 된 표준 입력 (이전 파일에서 리디렉션 )과 내부입니다 그 시도가에서 읽고 표준 입력 . 해결책은 stdin 대신 읽도록 만드는 것입니다 .</dev/null
while
exec 0<"${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!"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다