다음 루프의 출력을 다른 루프 아래에 추가하고 싶지만 출력 파일에서는 "abc3"의 결과만 얻습니다.
아래 스크립트를 찾았습니다. 변경 사항에 대해 알려주세요. 미리 감사드립니다.
for i in abc1 abc2 abc3
do
SELECT_QUERY_1="select substring('$i',4,len('$i')-7) as Table_Name,COLUMN_NAME,ORDINAL_POSITION,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = '$i' and ORDINAL_POSITION <= (select max(ORDINAL_POSITION)-4 from INFORMATION_SCHEMA.COLUMNS where table_name = '$i')"
echo -e `/opt/mssql-tools/bin/sqlcmd -S server_name -U username -P user -d db -Q "$SELECT_QUERY_1" -o "out.txt"`
sed "s/^[ \t]*//" -i out.txt
mv out.txt /home/results/out.txt
done
답변1
경로 변경
mv out.txt /home/results/out.txt
도착하다
cat out.txt >> /home/results/out.txt
세 가지 결과를 모두 하나의 파일에 넣습니다. 이 명령을 사용하면 mv
매번 파일을 덮어쓰게 됩니다. 그렇기 때문에 최종 결과만 얻을 수 있습니다.
해당 파일에 오래된 데이터를 보관하고 싶지 않다면,
rm /home/results/out.txt
스크립트 시작 부분에
답변2
echo -e `/opt/mssql-tools/bin/sqlcmd ... -o "out.txt"`
여기서는 명령 대체를 사용하여 출력을 캡처 sqlcmd
한 다음 echo를 사용하여 다시 인쇄합니다. 이것은 거의 유용하지 않으며 아마도 /opt/mssql-tools/bin/sqlcmd ... -o "out.txt"
명령 대체나 echo
. (따옴표가 없는 명령 대체 + 에코는 모든 공백을 단일 공백으로 변환한다는 점에서 작은 차이가 있습니다.)
sqlcmd
이제 모든 호출의 모든 출력을 단일 파일에 연결하려고 한다고 가정하면 appendout( >>
)을 사용하여 결과를 최종 파일로 직접 보낼 수 있습니다.
sqlcmd
정상적으로 표준 출력으로 출력되는 경우 다음을 수행할 수 있습니다.
/opt/mssql-tools/bin/sqlcmd -S server_name -U username -P user \
-d db -Q "$SELECT_QUERY_1" | sed "s/^[ \t]*//" >> /home/results/out.txt
/dev/stdout
지원되지 않는 경우 출력 파일로 사용할 수 있습니다 .
/opt/mssql-tools/bin/sqlcmd -S server_name -U username -P user \
-d db -Q "$SELECT_QUERY_1" -o /dev/stdout | sed "s/^[ \t]*//" >> /home/results/out.txt