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行目に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実行時に各行が表示されます。

于 2012-11-29T13:47:50.793 に答える
0

その出力は、期待されるもののように見えます。シーケンスは次のとおりです。

tput cup 1
echo "1"

行 1 に移動し、1 を出力します。これは正しく機能します。

tput cup 2
echo ;"2";

2 行目に移動し、3 行目に移動する空白行 (引数なし) を出力します。次に、スクリプトが見つけられないechoという名前のプログラムを実行すると、 3 行目にエラー メッセージが出力されます。2./var.sh: line 5: 2: command not found

tput cup 3
echo "3";

3 行目に移動して 3 を出力すると.、上記のエラー メッセージの が上書きされます。厳密に左から右、上から下の順序で生成されたわけではありませんが、最終的な見かけの出力が得られます。

于 2012-11-29T15:29:51.137 に答える
0

これは、標準出力と標準エラーが異なる方法で出力されるためです。標準出力は同期的です。つまり、行が順番に到着したときに出力されますが、標準エラーは非同期です。つまり、端末が収まるたびに出力されます。これを修正する 1 つの方法は、標準エラーを標準出力と一緒にチャンクすることです。

/var.sh 2>&1

詳細については、Greg の wikiを参照してください。

PS: ファイル内のすべてのセミコロンは不要です。コマンドが改行で区切られている場合、セミコロンは必要ありません。

于 2012-11-29T14:50:47.620 に答える