stderr always coming in stdout

オープン
#339 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

  • #342 @steelbrain による — マージされずにクローズ

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
node.js, typescript
領域
networking

調査の方向性

報告されている pty、stdin、stream: 'both' のオプションを使い、ssh.exec のエントリポイントから開始して、コマンドの出力が result.stdout と result.stderr にどのように割り当てられるかを追跡します。sudo apt updat のケースを再現し、エラーテキストが result.stderr に分離され、終了コードが 100 のままであることを確認します。

索引モデルが issue の本文から書いたものです。

説明

Hi,

I have faced an issue, which always returns stderr in result.stdout rather than result.stderr.
node-ssh version 10.0.2

ssh.connect({
  host: 'localhost',
  username: '<username>',
  password: '<password>'
}).then(() => {
  ssh.exec('sudo apt updat', [], {
    execOptions: { pty : true },
    stdin: '<password>\n',
    stream: 'both'
  }).then((result) => {
    console.log("Result StdOut", result.stdout)
    console.log("Result StdErr", result.stderr)
    console.log("Result", result)
  })
})

Note: Intensively I make an error in the command sudo apt updat to expecting error.

When I execute above code I got the error always in the stdout.

Result StdOut 
[sudo] password for <username>: 
E: Invalid operation updat
Result StdErr 
Result {
  code: 100,
  signal: null,
  stdout: '<password>\r\n' +
    '[sudo] password for <username>: \r\n' +
    '\u001b[1;31mE: \u001b[0mInvalid operation updat\u001b[0m',
  stderr: ''
}

But the same is working expected using ssh2
Below is the sample.

var Client = require('ssh2').Client;
 
var conn = new Client();
conn.on('ready', function() {
  console.log('Client :: ready');
  conn.exec('apt updat', function(err, stream) {
    if (err) throw err;
    stream.on('close', function(code, signal) {
      console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
      conn.end();
    }).on('data', function(data) {
      console.log('STDOUT: ' + data);
    }).stderr.on('data', function(data) {
      console.log('STDERR: ' + data);
    });
  });
}).connect({
  host: 'localhost',
  port: 22,
  username: '<username>',
  password: '<password>'
});

Output is

STDERR: 
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.


STDERR: E: Invalid operation updat
STDERR: 

Stream :: close :: code: 100, signal: undefined
主要言語
TypeScript
スター
1k
フォーク
94
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

steelbrain/node-ssh のほかの issue

steelbrain/node-ssh の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。