我想将以下循环的输出附加到另一个循环的下面,但在输出文件中我只得到“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
到一个文件,您可以使用附加输出 ( >>
) 将结果直接定向到最终文件。
如果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