sessionブロックの使い方について

コメント

5件のコメント

  • 正式なコメント
    服部健太

    セッションチャネル <s> は、コマンドを実行した際の標準出力の結果が、データとして蓄えられます。

    したがいまして、環境変数の設定は標準出力を伴わないため、セッションチャネル<s> からの読み出し時にブロックされてしまうことになります。

    環境変数の設定とコマンド実行を分けたい場合は、以下のようにしてみてください。

    [s.send: "export LANG=C\n"] ->
    [s.send: "date\n"] ->
    <s> ->
    print($RESULT)
    コメントアクション Permalink
  • 服部健太

    コマンドの出力結果が大量の場合、セッションチャネル<s> からの読み出しは一回では完了しない場合があります。

    したがって、出力が150行程度あるコマンドの結果をセッションチャネルから読み込むには、

    [s.send: "command\n"] ->
    [command_result = ''] ->
    { while true |
    <s: timeout=5> =>
    [status = $STATUS, result = $RESULT] ->
    { if status | break } -> # 出力が途切れたので読み込みループを抜ける
    [command_result = command_resut + result]
    } ->
    print(command_result)

    のようにする必要があります。

    0
    コメントアクション Permalink
  • 服部健太

    セッションの出力結果の抑止につきましては、V1.6.5 以降でしたら、

    システム設定(/system/cnofig)の「セッション表示可否」を false にセットすることで抑止されます。(詳細はマニュアル 2.7.4.システム設定をご参照ください)

    0
    コメントアクション Permalink
  • 服部健太

    s.send はあくまでもコマンドを送り付けるだけのジョブですので、コマンドの成功・失敗にかかわらず、コマンドが正しく送信されれば結果は成功となります($STATUS == 0)

    送信したコマンドの実行結果を取得したい場合は、echo $?などを使って、以下のように明示的にコマンド実行結果を取得してチェックする必要があります。

    [s.send: "some_command\n"] ->
    <s> -> [command_result = $RESULT] ->
    [s.send: "echo $?\n"] ->
    <s> -> [command_status = $RESULT]

     

    0
    コメントアクション Permalink
  • ueyama_tomoaki

    上記ご回答ありがとうございます。

    ご指定の方法で、意図どおり動きました。

    セッション表示可否のoffやセッションチャネル、戻り値の仕様も理解いたしました。

    ご教示いただきありがとうございました。

    0
    コメントアクション Permalink

サインインしてコメントを残してください。