説明

タイトル通りです。
scoop statusのように実行しても結果が表示されると同時に終了するので困ってしまいます。

なぜなのか?

以前にこちらで説明したとおり、 scoopコマンドは実行ファイルを指すものではなく、
エイリアスであることが関係していそうです。

PPbでscoopを実行すると大まかに次のような処理が発生します。

  1. %PATH%\scoopを探す
  2. path\to\Scoop\shims\scoopを発見
  3. cmd.exeでpath\to\Scoop\shims\scoopを実行

PPbは渡されたファイルパスをOS側の拡張子判別で処理しているようです。
E_crの拡張子判別はPPcから渡されたパスを対象としているのでこの場合は対象になりません。

ではPPb上に scoop status は出力できないのか?

path\to\Scoop\shims配下には3つのscoopファイルがあります。

 Scoop\shims
├──  scoop
├──  scoop.cmd
├──  scoop.ps1


*ppb -k scoopcmd.exeが起動しますが他のパスを指定するとどうなるか試してみましょう。

  • *ppb -k scoop.cmd PPb上にscoopコマンドの実行結果が出力される
  • *ppb -k scoop.ps1 メモ帳が開きscoop.ps1の内容が出力される

どうやら、name.cmdはPPbで直接実行されるようです。
scoop.cmd statusと記述することでPPb上に出力されることがわかりました。やったね!

でもやっぱり scoop status を実行したい

scoop statusをPPb上で実行するには、path\to\Scoop\shims\scoopが邪魔になります。
scoopのエイリアスにpath\to\Scoop\shims\scoop.cmdを設定してみてはどうか?
Scoop自身が環境変数SCOOPを設定しているために問題がでます。
結論としては、path\to\Scoop\shims\scooppath\to\Scoop\shims\scoop.backupなどに
改名することでscoop statusをPPb上で直接実行できます。
ただし、path\to\Scoop\shims\scoopがどのような使われ方をしているのかわかりませんし、
Scoopのアップデート時には元に戻ると思います。

path\to\Scoop\shims\scoopの中身はsh/bash用のシェルスクリプトになっています

というわけで直接実行は諦めてcmd /K scoop statuspowershell -Command scoop status
とするか、PPb以外のシェル上で実行するなどの方法を取りましょう。
どうしてもPPbで実行したいときのためにscoop.cmdを憶えておくとよいと思います。