シェルスクリプトでパラメータを使用して別のスクリプトを実行し、対応する戻りコードを取得します。

シェルスクリプトでパラメータを使用して別のスクリプトを実行し、対応する戻りコードを取得します。

i686/32ビットデュアルCPUで新しいDebian Stretchインストールを使用してOctave 4.2.1をインストールし、./mytest実行権限を付与した後、次を実行しました。

#!/bin/bash
./mytest.m

どこでtest.m読むか

#!/usr/bin/octave
exit(0)

に保存されている2つのスクリプトを~/tmp考えると、mytest

#!/bin/bash

if $1/mytest.m "$2"; then
  echo "good"
else
  echo "bad"
fi

そしてmytest.m

#!/usr/bin/octave

param = argv(){1};

if strcmp(param, "happyend")
  exit(0)
else
  exit(1)
end

Running は normally に渡され、次に に渡され、tmp/mytest tmp happyend信号 0 を再度渡し、「good」を印刷します。では、変数から戻り(終了)コードをどのように取得できますか? (上記の例では0)。happyendmytestmytest.mmytestmytest.m

直感的なオプション

#!/bin/bash

result=$("$1"/mytest.m "$2")

if [ $result = 0 ]; then
  echo "good"
else
  echo "bad"
fi

不可能。

ベストアンサー1

コマンドから戻り(終了)コードを取得するには、値$?を次の変数に保存する必要がありますresult

"$1/mytest.m" "$2"
result=$?
if [ "$result" -eq 0 ]; then
  echo "good"
else
  echo "bad"
fi

テストするのに長い時間結果を保存するには、result次のコマンドを使用して変数をスキップします。

"$1/mytest.m" "$2"
if [ $? -eq 0 ]; then
  echo "good"
else
  echo "bad"
fi

しかし、注意して$?テストした直後にmytest.mを実行する必要があります。以降のコマンドは彼らにコードを返します$?

結果がゼロであることをテストしたい場合は、それを整数として扱う必要はありません。コマンド自体を条件と考えてください。

if "$1/mytest.m" "$2"; then
  echo "good"
else
  echo "bad"
fi

おすすめ記事