0

我正在使用以下脚本,

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

然后输出就像

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
4

3 回答 3

1

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

于 2012-11-29T13:47:50.793 回答
0

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

/var.sh 2>&1

Greg 的 wiki中的更多详细信息。

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

于 2012-11-29T14:50:47.620 回答
0

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

tput cup 1
echo "1"

移动到第 1 行并输出 1。这可以正常工作。

tput cup 2
echo ;"2";

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

tput cup 3
echo "3";

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

于 2012-11-29T15:29:51.137 回答