テストを自動化するためにクラッシュパッケージを使用しています。$?
競合するシェル内で以前のコマンドが正常に実行されたことを確認するために使用できる同様のものがありますか?
たとえば、次のようなコマンドを発行した場合:
crash> bt -a
一度実行すると、実行が成功したかどうかをどのように知ることができますか?私が念頭に置いている唯一の解決策は結果をgrepすることですが、環境が変わると信頼できません。
これは私が試したときに得るものですecho $?
:
crash> bt asd
bt: invalid task or pid value: asd
crash> $?
crash: command not found: $?
crash> echo $?
0
crash>
crash> q
root@at0012-ubuntu:~/crashKernel#
$?
常に0を表示します。
数日前にスーパーユーザーにこの質問をしましたが、何の助けも受けませんでした。どんな助けでも大変感謝します。
答え1
@Anthonが提案したように、これはBashやDashなどの「一般的な」*nixシェルではなく、アプリケーション固有のプロンプトですq
(POSIX 組み込みユーティリティ例えば)。ちょっと見てみるとman crash
最後のコマンドの終了コードを取得するコマンドがないようです。
答え2
申し訳ありません。元の質問を誤解しました。
答えは「いいえ」です。クラッシュユーティリティコマンドが正常に完了したかどうかを知る方法はありません。コマンドを実行するために呼び出される関数は void 関数です。たとえば、「bt」コマンドは次のように宣言されます。
無効 cmd_bt(void) { ... }
答え3
@l0b0がすでに述べたように、これはシェルではありませんnormal
。それ以外は、echo
プロンプトに入力できるコマンドでは動作しないようです。比較する:
crash -h bt
そして
crash -h echo
0
メッセージに従って試してみると、おそらく同じ結果が得られますcrash>
。
spam ?0
答え4
クラッシュユーティリティの "bt"コマンドは、システムコールまたは例外を介して特定の操作がカーネルモードに最後に入った時間のスタックトレースを提供します。もう存在しないジョブ(つまり、以前にbashシェルで実行されたジョブ)の状態に関する概念はありません。