- Community Home
- >
- HPE Community, Japan
- >
- HP-UX
- >
- HP-UX General
- >
- コマンド終了ステータスの取得
HP-UX General
1824219
メンバー
3983
オンライン
109669
解決策
フォーラム
カテゴリ
Company
Local Language
戻る
フォーラム
ディスカッションボード
フォーラム
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
ディスカッションボード
フォーラム
ディスカッションボード
ディスカッションボード
ディスカッションボード
フォーラム
ディスカッションボード
戻る
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
ブログ
コミュニティ言語
言語
フォーラム
ブログ
トピックオプション
- RSS フィードを購読する
- トピックを新着としてマーク
- トピックを既読としてマーク
- このトピックを現在のユーザーにフロートします
- ブックマーク
- 購読
- 印刷用ページ
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
05-27-2005 01:27 PM
05-27-2005 01:27 PM
コマンド終了ステータスの取得
いつもお世話になっております。
以下のようなケースでのコマンドの終了ステータスを取得する方法をご教授ください。
コマンド行>
tar cvf /dev/rmt/0mn /tmp 2>&1 >&- | tee -a tar.log
(状況)
・tarコマンドの標準出力・エラー出力をログファイルと画面に
出力するためにパイプでteeコマンドに渡しています。
・このコマンド行の次の行で$?の終了ステータスを取得すると
teeコマンドの終了ステータスが取れてしまいます。
(ご質問)
・tarコマンドが異常終了した場合(終了ステータス0以外)に
エラー出力はteeに渡して表示した後に、スクリプトを異常終了(exit)させる
方法はありますでしょうか
説明がわかりづらいかもしれませんが宜しくお願いいたします
以下のようなケースでのコマンドの終了ステータスを取得する方法をご教授ください。
コマンド行>
tar cvf /dev/rmt/0mn /tmp 2>&1 >&- | tee -a tar.log
(状況)
・tarコマンドの標準出力・エラー出力をログファイルと画面に
出力するためにパイプでteeコマンドに渡しています。
・このコマンド行の次の行で$?の終了ステータスを取得すると
teeコマンドの終了ステータスが取れてしまいます。
(ご質問)
・tarコマンドが異常終了した場合(終了ステータス0以外)に
エラー出力はteeに渡して表示した後に、スクリプトを異常終了(exit)させる
方法はありますでしょうか
説明がわかりづらいかもしれませんが宜しくお願いいたします
3件の返信3
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
05-27-2005 02:57 PM
05-27-2005 02:57 PM
コマンド終了ステータスの取得
まず、すいません、テストのため、tarの代わりに、
#include
main(argc, argv)
int argc;
char *argv[];
{
int i;
printf("Hello\n");
i = atoi(argv);
exit(i);
}
を作ります。これをコンパイルして出来たのを"a" と
すると、
$ ./a 0
Hello
$ echo $?
0
$ ./a 1
Hello
$ echo $?
1
となります。exitコードを選べるわけです。で、
スクリプト、
#!/usr/bin/sh
./a 1 | tee -a logfile
echo exit code $?
を実行すると、
Hello
exit code 0
となって、1 にはならない。これを捕まえたいわけですね。
ちょっと汚いですが、こんな手を思いつきました。
#!/usr/bin/sh
( ./a 1 ; echo "Tar:exit code $?" ) | tee -a logfile
grep 'Tar:exit' logfile
実行すると、
Hello
Tar:exit code 1 <- これはechoの出力
Tar:exit code 1 <- こっちが grep の出力
となりました。shell 変数に入れたいところですが、とりあえずは logfile に tar の exitコード情報を含めてしまうわけです。後からlogfileでtar の exitコードを調べて、エラーならスクリプトを exitさせる。
うーん、もっとうまい手があるかも知れませんが、参考まで。
#include
main(argc, argv)
int argc;
char *argv[];
{
int i;
printf("Hello\n");
i = atoi(argv);
exit(i);
}
を作ります。これをコンパイルして出来たのを"a" と
すると、
$ ./a 0
Hello
$ echo $?
0
$ ./a 1
Hello
$ echo $?
1
となります。exitコードを選べるわけです。で、
スクリプト、
#!/usr/bin/sh
./a 1 | tee -a logfile
echo exit code $?
を実行すると、
Hello
exit code 0
となって、1 にはならない。これを捕まえたいわけですね。
ちょっと汚いですが、こんな手を思いつきました。
#!/usr/bin/sh
( ./a 1 ; echo "Tar:exit code $?" ) | tee -a logfile
grep 'Tar:exit' logfile
実行すると、
Hello
Tar:exit code 1 <- これはechoの出力
Tar:exit code 1 <- こっちが grep の出力
となりました。shell 変数に入れたいところですが、とりあえずは logfile に tar の exitコード情報を含めてしまうわけです。後からlogfileでtar の exitコードを調べて、エラーならスクリプトを exitさせる。
うーん、もっとうまい手があるかも知れませんが、参考まで。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
05-27-2005 03:02 PM
05-27-2005 03:02 PM
コマンド終了ステータスの取得
こんにちは。
シェルにしちゃっていいなら。
---
#!/usr/bin/sh
tar cvf /dev/rmt/0mn /tmp 2>&1
echo $?
---
というシェル(test.shとする)を作って、
# sh test.sh | tee tar.log
で両方取れますよ。
どうしても終了コード0が出したくないなら
if文等で分岐させてください。
シェルにしちゃっていいなら。
---
#!/usr/bin/sh
tar cvf /dev/rmt/0mn /tmp 2>&1
echo $?
---
というシェル(test.shとする)を作って、
# sh test.sh | tee tar.log
で両方取れますよ。
どうしても終了コード0が出したくないなら
if文等で分岐させてください。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
05-27-2005 04:28 PM
05-27-2005 04:28 PM
コマンド終了ステータスの取得
別解です。
多分、バックアップ時間はこちらの方が短いと思います。(特にコンソールで実行した場合。)
#場合によっては最後の出力が一部スキップされるかもしれませんが。
----------
tar cvf /dev/rmt/0mn /tmp >>tar.log 2>&1 &
tail -f tar.log &
wait %1
RV=$? ; echo "Tar exit by $RV"
kill %2
tail tar.log
-----------
多分、バックアップ時間はこちらの方が短いと思います。(特にコンソールで実行した場合。)
#場合によっては最後の出力が一部スキップされるかもしれませんが。
----------
tar cvf /dev/rmt/0mn /tmp >>tar.log 2>&1 &
tail -f tar.log &
wait %1
RV=$? ; echo "Tar exit by $RV"
kill %2
tail tar.log
-----------
上記の意見は、Hewlett Packard Enterpriseではなく、著者の個人的な意見です。 このサイトを使用することで、利用規約と参加規約に同意したことになります 。
企業情報
© Copyright 2025 Hewlett Packard Enterprise Development LP