如何检测shell脚本的输出行数

时间:2012-11-29 13:45:48

标签: linux shell unix

我正在使用以下脚本,

clear
tput cup 1
echo "1";
tput cup 2
echo "2";
tput cup 4
echo "3";

然后Out put就像

1
2
3

如果我使用错误的脚本,

clear
tput cup 1
echo "1";
tput cup 2
echo ;"2";
tput cup 3
echo "3";

然后输出就是

1

3/var.sh: line 5: 2: command not found

这意味着在第3行打印并且还打印出2行错误。 那么有没有办法检测错误行号以在错误后打印3?

修改

当我使用-x时,输出是

[root@srinivas Installation]# sh -x  var.sh 
+ clear







+ tput cup 1
+ echo 1
+ echo
+ echo 3up 2
3 2
[root@srinivas Installation]#  found
+ tput cup 3

3 个答案:

答案 0 :(得分:1)

如果您使用-x选项运行shell脚本,它会在执行时显示每一行。

答案 1 :(得分:0)

这是因为标准输出和标准错误以不同的方式打印 - 标准输出是同步的,这意味着行将按顺序打印并在它们到达时打印,而标准错误是异步的,这意味着只要终端适合就打印它解决此问题的一种方法是将标准错误与标准输出一起分块:

/var.sh 2>&1

Greg's wiki中的更多详情。

PS:文件中的所有分号都是不必要的 - 如果您的命令被换行符分隔,则永远不需要分号。

答案 2 :(得分:0)

该输出看起来应该是预期的。这是序列:

tput cup 1
echo "1"

移至第1行并输出1.这样可以正常工作。

tput cup 2
echo ;"2";

移到第2行,然后输出一个空行(echo没有参数),移到第3行。然后执行一个名为2的程序,脚本找不到,导致第3行打印错误消息./var.sh: line 5: 2: command not found

tput cup 3
echo "3";

移至第3行并输出3,它将覆盖上述错误消息中的.。导致您注意到的最终表观输出,即使它不是严格按照从左到右的从上到下的顺序生成的。